Share via


自定义控件开发

更新:2007 年 11 月

.NET Compact Framework 提供了可以满足大多数设备项目需要的 Windows 窗体控件。这些控件旨在高效地使用受限制的资源,因此没有为所有继承的属性、方法和事件提供支持。若要使用这些控件没有的功能,可以从公共控件派生您自己的自定义控件。可以通过定义从 Control 类或从程序集中的现有 UserControl 继承的公共类型创建自定义控件。

最简单的控件自定义是重写公共控件的方法。例如,可以重写 TextBox 控件的 OnKeyPress 继承方法,提供将输入限制为数字字符的代码。

说明:

.NET Compact Framework 不支持从基控件继承的 Windows 窗体控件的所有属性、方法和事件。

可以从公共控件派生以便:

  • 在公共控件上重写您自己的属性、方法和事件。

  • 定义控件的其他属性、方法和事件。

  • 生成复合控件,如 TextBoxButton 控件的集合。

  • 定义控件如何响应用户操作,如只接受数字数据的 TextBox

.NET Compact Framework 目前不提供添加用于设计时访问的自定义控件的功能。

如果要进行更详细的自定义,必须创建从 Control 类派生的自定义控件。您可以通过重写 OnPaint 方法来绘制控件,并可创建非 UI 控件以满足自定义事件之类的需要。

Control 基类不知道如何绘制派生控件,而且没有在 OnPaint 方法中提供任何绘制逻辑。ControlOnPaint 方法只是将 Paint 事件调度到注册的事件接收器中。

.NET Compact Framework 只为 FormControl 类引发 PaintResize 事件。

将自定义控件添加到工具箱

在为 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
    

帮助主题

下列帮助主题演示如何使用自定义控件获取扩展功能:

如何:创建自定义双击事件

如何:创建自定义图像按钮控件

如何:显示渐变填充

如何:创建数字文本框

如何:创建一个所有者描述的列表框

如何:创建 OnEnter 功能

如何:滚动窗体内容

如何:对 ListView 项排序

如何:使用本机回调创建 TreeView 的子类

如何:使用本机回调创建 Button 的子类

请参见

概念

使用托管窗口过程设置控件的子类

其他资源

.NET Compact Framework 中的 Windows 窗体控件