自定义控件(Windows Forms .NET)
使用 Windows 窗体,可以通过继承创建新控件或修改现有控件。 本文重点介绍了创建新控件的方式之间的差异,并提供有关如何为项目选择特定类型的控件的信息。
基础控件类
Control 类是 Windows 窗体控件的基类。 它提供 Windows 窗体应用程序中视觉显示所需的基础结构,并提供以下功能:
- 暴露窗口句柄。
- 管理消息路由。
- 提供鼠标和键盘事件,以及许多其他用户界面事件。
- 提供高级布局功能。
- 包含特定于视觉显示的许多属性,例如 ForeColor、BackColor、Height和 Width。
由于大部分基础结构由基类提供,因此开发自己的 Windows 窗体控件相对容易。
创建自己的控件
可以创建三种类型的自定义控件:用户控件、扩展控件和自定义控件。 下表可帮助你确定应创建的控件类型:
如果。。。 | 创建 ... |
---|---|
|
通过继承 System.Windows.Forms.UserControl,设计 用户控件。 |
|
通过从特定的 Windows 窗体控件继承来扩展控件。 |
|
通过继承 System.Windows.Forms.Control,创建 自定义控件。 |
用户控件
用户控件是作为单个控件提供给使用者的 Windows 窗体控件的集合。 此类控件称为 复合控件。 包含的控件称为 组件控件。
用户控件包含与每个包含的 Windows 窗体控件关联的所有固有功能,使你可以有选择地公开和绑定其属性。 用户控件还无需任何额外开发努力即可提供大量默认键盘处理功能。
例如,可以生成用户控件以显示数据库中的客户地址数据。 此控件将包括用于显示数据库字段的 DataGridView 控件、用于处理绑定到数据源的 BindingSource,以及用于在记录中移动的 BindingNavigator 控件。 你可以有选择地公开数据绑定属性,并且可以打包并重复使用整个控件,从应用程序到应用程序。
有关详细信息,请参阅 用户控件概述。
扩展控件
您可以从任何现有的 Windows 窗体控件派生一个继承控件。 使用此方法,你可以保留 Windows 窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能来扩展该功能。 使用此选项,您可以覆盖基本控件的绘图逻辑,然后通过更改其外观来扩展用户界面。
例如,可以创建派生自 Button 控件的控件,该控件跟踪用户单击的次数。
在某些控件中,还可以通过重写基类的 OnPaint 方法,向控件的图形用户界面添加自定义外观。 对于跟踪单击的扩展按钮,可以重写 OnPaint 方法以调用 OnPaint的基本实现,然后在 Button 控件工作区的一角绘制单击计数。
自定义控件
创建控件的另一种方法是通过从 Control继承,从头开始创建一个控件。 Control 类提供控件所需的所有基本功能,包括鼠标和键盘处理事件,但没有特定于控件的功能或图形界面。
通过继承自 Control 类来创建控件,比继承自 UserControl 或现有的 Windows 窗体控件需要更多的思考和努力。 由于为你留下了大量实现,因此你的控件可以比复合控件或扩展控件具有更大的灵活性,并且你可以定制控件以满足你的确切需求。
若要实现自定义控件,必须为控件的 OnPaint 事件编写代码,该事件控制控件的直观绘制方式。 您还必须为控件编写功能特定的行为。 还可以替代 WndProc 方法并直接处理 Windows 消息。 这是创建控件的最强大方法,但要有效地使用此技术,需要熟悉 Microsoft Win32® API。
自定义控件的一个示例是一个时钟控件,它复制模拟时钟的外观和行为。 为了响应来自内部 Timer 组件的 Tick 事件,调用自定义绘制以使时钟的指针移动。
自定义设计体验
如果需要实现自定义设计时体验,可以编写自己的设计器。 对于复合控件,请从 ParentControlDesigner 或 DocumentDesigner 类派生自定义设计器类。 对于扩展控件和自定义控件,请从 ControlDesigner 类派生自定义设计器类。
使用 DesignerAttribute 将您的控件与设计器相关联。
以下信息已过期,但可能有助于你。