可点击的分隔符





4.00/5 (5投票s)
2002年11月6日
3分钟阅读

76787

2529
一个基于标准分割器的 C# 自定义控件,显示嵌入资源。
引言
本文展示了一个基于标准分割器的自定义控件。 该扩展添加了点击行为以及基于位置和方向的光标。 点击行为实现了标准的最小化/最大化/恢复行为。 我拖动标准分割器时手腕受伤了......所以就有了这个。 本文没有告诉你如何编写自定义控件,有很多其他的文章专门介绍这个,本文只展示了这个过程的结果(看看源码,卢克!)。
背景
减少实现目标所需的用户交互总是好的。 标准分割条需要拖动才能将其位置设置为其极端位置之一。 拖动后,之前的位置会丢失。 可以通过点击来达到极端位置,代替拖动到极端位置,并且在此过程中可以保留上一个位置以便以后点击恢复。 这是一件有趣的事情,并且是一种在使用嵌入资源时四处摸索的好方法,它导致了基于位置和方向的光标,这些光标指示了简单的点击可以带来的效果。
使用代码和控件
ClickableSplitter
可以像任何其他自定义控件一样添加到工具箱中。 它有一个名为 UseCursors
的新自定义属性,位于 Behavior
类别中。 它的默认值为 false
,因此,要看到新的光标生效,您必须将此属性设置为 true
。 显示的光标和点击的结果(直接相关,即光标显示点击将产生的效果)遵循逆时针模式。
接下来,将一些代码定位到一些关键片段
构造函数使用 Assembly
类的 GetManifestResourceStream
成员来加载嵌入的光标。 可以通过使用静态数据和属性来加载光标来改进此过程,但是,正如在大量注释的代码中指出的那样,这留给读者作为练习,尽管我可能会在以后时间允许时发布一个更新来展示这一点。public ClickableSplitter() { Assembly assembly = GetType().Assembly; AssemblyName assemblyName = assembly.GetName(); for(cursorStyles cursorStyle = cursorStyles.down; cursorStyle <= cursorStyles.upRestore; cursorStyle++) { cursors[(int)cursorStyle] = new Cursor( assembly.GetManifestResourceStream(assemblyName.Name + ".Cursors." + cursorNames[(int)cursorStyle] + ".cur")); } }
自定义 UseCursors
属性安装和卸载鼠标移动处理程序,以展示一种执行此操作的方法。
[ Bindable(true), Category("Behavior"), DefaultValue(false), Description("Determines whether to use orientation and position based cursors.") ] public bool UseCursors { get {return useCursors;} set { if(!value) { if(useCursors) MouseMove -= new MouseEventHandler(OnMouseMove); } else { if(!useCursors) MouseMove += new MouseEventHandler(OnMouseMove); } useCursors = value; } }
...最后,使用 OnSplitterMoved
事件引发器在各处移动分割器...
private void OnHorizontalSplitterMoved(int newSize, int extremeSize) { if(SplitPosition != extremeSize) lastPosition = SplitPosition; OnSplitterMoved(new SplitterEventArgs(0, newSize, 0, newSize)); }
关注点
世界花费了大量时间才得到看起来像 UNCOL 的东西,而现在正是时候! 我从来没有走 DCOM、CORBA 或类似的方式,因为在我看来,它需要在开发人员和最终用户端进行太多的管道连接。 有一天,几年前,在出售我曾经工作的公司之后,我新任 CORBA 上瘾的 CEO 对我提出的“为什么要使用 CORBA?”问题的回答是“它不是来自......”你知道是谁。 使用最能帮助您完成工作的工具,无论它来自 X 公司还是 Y 公司都不重要。 我越来越喜欢 .NET 的东西了,每次我摆弄它! 希望你也喜欢!