【WinForm.NET开发】自定义控件

本文内容

  1. 基控件类
  2. 创建自己的控件
  3. 用户控件
  4. 扩展控件

可使用 Windows 窗体开发和实现新的控件。 可以创建新的用户控件,通过继承来修改现有控件,或编写可自行绘制的自定义控件。 本文重点介绍各种可继承控件之间的差异,并提供有关如何为项目选择某种特定控件的信息。

1、基控件类

Control 类是 Windows 窗体控件的基类。 它提供了在 Windows 窗体应用程序中进行可视化显示所需的基础结构,并提供了以下功能:

  • 公开窗口句柄。
  • 管理消息路由。
  • 提供鼠标和键盘事件,以及许多其他用户界面事件。
  • 提供高级布局功能。
  • 包含特定于可视化显示的多个属性,如 ForeColorBackColorHeight 和 Width

由于基类提供了大量基础结构,因此开发你自己的 Windows 窗体控件相对比较简单。

2、创建自己的控件

可以创建三种类型的自定义控件:用户控件、扩展控件和自定义控件。 下表可帮助你确定应创建的控件类型:

展开表

如果出现如下情况创建以下内容
  • 你想要将多个 Windows 窗体控件的功能组合到单个可重用单元。
通过从 System.Windows.Forms.UserControl 继承来设计用户控件
  • 大部分所需功能与现有的 Windows 窗体控件相同。
  • 你不需要自定义图形用户界面,或者想为现有控件设计一个新的图形用户界面。
通过从某一特定 Windows 窗体控件继承来扩展控件
  • 你想要提供控件的自定义图形表示形式。
  • 你需要实现不能通过标准控件实现的自定义功能。
通过从 System.Windows.Forms.Control 继承来创建自定义控件

3、用户控件

用户控件是作为单个控件提供给使用者的 Windows 窗体控件的集合。 此类控件称为复合控件。 其包含的控件称为构成控件。

用户控件包含与每个包含的 Windows 窗体控件相关联的所有固有功能,允许选择性地公开和绑定它们的属性。 用户控件还提供了大量的默认键盘处理功能,用户不需要进行任何额外的开发。

例如,可以生成用户控件,以显示来自数据库的客户地址数据。 此控件将包括用于显示数据库字段的 DataGridView 控件、用于处理到数据源的绑定的 BindingSource,以及用于在记录之间移动的 BindingNavigator 控件。 可以选择性地公开数据绑定属性,还可以将整个控件打包并在不同应用程序之间重复使用。

4、扩展控件

你可以从任何现有的 Windows 窗体控件派生继承的控件。 使用此方法,你可以保留 Windows 窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能来扩展该功能。 可以使用此选项重写基控件的绘制逻辑,然后通过更改该控件的外观来扩展其用户界面。

例如,可以创建一个由 Button 控件派生的控件,并用它来跟踪用户的单击次数。

在某些控件中,也可以通过重写基类的 OnPaint 方法为控件的图形用户界面添加自定义外观。 对于跟踪单击次数的扩展按钮,可以重写 OnPaint 方法以调用 OnPaint 的基实现,然后在 Button 控件的工作区的一角绘制单击计数。

自定义控件

创建控件的另一种方法是通过从 Control 继承,从头开始充分创建一个控件。 Control 类提供控件所需的所有基本功能(包括鼠标和键盘处理事件),但不提供特定于控件的功能或图形界面。

相比从 UserControl 或现有 Windows 窗体控件继承来说,通过从 Control 类继承来创建控件需要花费更多心思和精力。 由于用户还需执行大量的实现,因此,控件可以具有比复合控件或扩展控件更好的灵活性,而且可以使控件完全满足自己的需要。

要实现自定义控件,必须为控件的 OnPaint 事件编写代码,它控制着控件的视觉绘制方式。 还必须为控件编写任何特定于功能的行为。 还可以重写 WndProc 方法并直接处理窗口消息。 这是创建控件的最强大的方法,但若要有效地使用此技术,需熟悉 Microsoft Win32® API。

时钟控件即是一个自定义控件,它复制模拟时钟的外观和行为。 调用自定义绘制来使指针移动,以响应来自内部 Timer 组件的 Tick 事件。

自定义设计体验

如果需要实现自定义设计时体验,可以创作自己的设计器。 对于复合控件,从 ParentControlDesigner 或 DocumentDesigner 类派生自定义设计器类。 对于扩展控件和自定义控件,从 ControlDesigner 类派生自定义设计器类。

使用 DesignerAttribute 将控件与设计器关联。

  • 22
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉特思米(gitusme)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值