自定义控件开发
更新:2007 年 11 月
.NET Compact Framework 提供了可以满足大多数设备项目需要的 Windows 窗体控件。这些控件旨在高效地使用受限制的资源,因此没有为所有继承的属性、方法和事件提供支持。若要使用这些控件没有的功能,可以从公共控件派生您自己的自定义控件。可以通过定义从 Control 类或从程序集中的现有 UserControl 继承的公共类型创建自定义控件。
最简单的控件自定义是重写公共控件的方法。例如,可以重写 TextBox 控件的 OnKeyPress 继承方法,提供将输入限制为数字字符的代码。
说明: |
---|
.NET Compact Framework 不支持从基控件继承的 Windows 窗体控件的所有属性、方法和事件。 |
可以从公共控件派生以便:
在公共控件上重写您自己的属性、方法和事件。
定义控件的其他属性、方法和事件。
定义控件如何响应用户操作,如只接受数字数据的 TextBox。
.NET Compact Framework 目前不提供添加用于设计时访问的自定义控件的功能。
如果要进行更详细的自定义,必须创建从 Control 类派生的自定义控件。您可以通过重写 OnPaint 方法来绘制控件,并可创建非 UI 控件以满足自定义事件之类的需要。
Control 基类不知道如何绘制派生控件,而且没有在 OnPaint 方法中提供任何绘制逻辑。Control 的 OnPaint 方法只是将 Paint 事件调度到注册的事件接收器中。
.NET Compact Framework 只为 Form 和 Control 类引发 Paint 和 Resize 事件。
将自定义控件添加到工具箱
在为 Microsoft Visual Studio 2005 中的自定义控件创建项目时,该控件在编译应用程序时自动被添加到“工具箱”。可以使用下列项目类型之一创建自定义控件:
控件库
类库
类库 (1.0)
若要将自定义控件添加到工具箱,请从“工具”菜单上单击“选择工具箱项”。然后可以浏览该控件的程序集。
自定义控件的开发技巧和注意事项
请在创建自定义控件时注意以下事项:
.NET Compact Framework 不支持从父控件继承的值,而 .NET Framework 全功能版中的有些控件是可以的。若要解决这个问题,可以使用 OnParentChanged 方法确定父控件何时更改并采取相应的操作。下面的代码示例演示如何在父控件更改时改变背景色:
protected override void OnParentChanged(EventArgs e) { base.OnParentChanged(e); this.BackColor = Parent.BackColor; }
Protected Overrides Sub OnParentChanged(ByVal e As EventArgs) MyBase.OnParentChanged(e) Me.BackColor = Parent.BackColor End Sub
.NET Compact Framework 不支持继承父控件的字体。
若要检测自定义控件上为显示快捷菜单而执行的“点击并按住”事件的位置,请处理 Popup 事件,然后使用 MousePosition 属性查询当前鼠标坐标。
若要按 Tab 键从自定义控件跳到前一个控件,可以在检测到 Up 键时在 KeyDown 事件处理程序中使用下列代码。
this.Parent.Controls( this.Parent.GetChildIndex(customcontrol) - 1).Focus()
Me.Parent.Controls( _ Me.Parent.GetChildIndex(customcontrol) - 1).Focus
帮助主题
下列帮助主题演示如何使用自定义控件获取扩展功能: