写点什么

window form 自定义控件类型

用户头像
JackWangGeek
关注
发布于: 2020 年 08 月 12 日
window form自定义控件类型



所谓的控件(Control)就是对数据和方法的封装。一般来说,控件都有自己的属性、 方法和事件。控件的属性是存储控件数据的容器,控件的方法则是实现控件所需的功能。为 了提高开发的效率和界面的标准化,很多软件公司都有一套自己封装的 UI 控件,内部员工 (程序员)大部分时间都是在使用这些控件,很少有机会来开发这些自定义控件。 控件的设计和开发是一项比较繁重的工作,同时对程序员的要求也比较高,需要掌握 GDI+编程、事件模型、Windows API 和面向对象开发等知识。一个使用比较方便的控件, 其背后往往是大量的代码。虽然开发自定义控件是一个比较复杂的过程,但也是一个一劳永 逸的过程。开发控件的最大意义在于封装重复的工作,其次是可以扩充现有控件的功能。 另外,和控件概念容易混淆的是组件(Component)。一般来说,控件是具有用户界面 的可视化的组件。例如窗体中的文本框、列表框。而组件一般用户逻辑处理,比如实现数据 绑定、逻辑计算和计时触发等功能。

控件的类型 以 Windows Forms 控件来说,控件通常有三种类型:

  • 复合控件(Composite Controls) 复合控件将现有的各种控件组合起来,形成一个新的控件,将多个控件的功能集中起来。

  • 扩展控件(Extended Controls) 扩展控件是在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能 或者修改原有控件的功能。

  • 自定义控件(Custom Controls) 自定义控件直接从 System.Windows.Forms.Control 类派生出来。Control 类提 供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的自定义控件开发方法,但是对开发者的要求也比较高,你必须为 Control 类的 OnPaint 事件写代码,你也 可以重写 Control 类的 WndProc 方法,处理更底层的 Windows 消息,所以你必须掌握一 定的 GDI+和 Windows API 知识。 后面的章节将重点介绍 GDI+相关知识,并用案例分别 讲解如何自定义控件。Custom Controls 自定义控件称为自绘制控件(Own-Drawing Controls)比较合适。

自定义控件是一个广泛的概念,包含上面的三种控件类型。

  • 控件的继承. 一般来说,控件的开发不是从零开始的,而是根据需要实现的控件功能,来选择合适的 控件类型,再根据控件类型来继承相关的类来实现,这样可以大大降低开发控件的难度和成 本。 继承 Windows 窗体控件 自定义控件可以继承自任何现有的 Windows 窗体控件,此方法可以保留 Windows 窗 体控件所有已有的功能和属性,控件开发人员只需要添加自定义的属性、方法或其他功能扩 展即可。例如,如果现在需要自定义一个只接受数值型的数值文本框,那么开发此数值文本 框可以创建一个从 TextBox 派生的控件,并为此控件添加一个验证输入是否为数值的判断 方法,每当文本框中的文本发生更改时就会调用此方法,另外如果需要定制数值文本框的外 观,可以通过重写基类 TextBox 的 OnPaint 方法将自定义外观添加到此控件上。

  • 继承 UserControl 用户控件(UserControl)是封装在公共容器内的 Windows 窗体控件的集合。此容 器包含与每个 Windows 窗体控件相关联的所有固有功能,允许控件开发人员有选择地公开 和绑定内部的属性。例如,如果现在需要开发一个 IP 文本框控件,只允许输入 IP 地址。那 么开发此IP控件可以通过继承用户控件,然后在用户控件上添加4个TextBox,在TextBox 中间放入一个 Label(设置其 Text 为.的符号),再通过检测每个文本框的文本变更时用户21 第二章 控件基础 21 输入字符的合法性,即用户输入的字符只允许为 0~255。 一般来说,如果要将若干个 Windows 窗体控件的功能合成一个可重新使用的单元,则 建议从 UserControl 类继承。

  • 继承 Control 创建一个新的控件,除了上面介绍的继承自现有窗体控件和用户控件类以外,也可以通 过继承 Control 类从头开发一个控件。Control 类提供控件(例如事件)所需的所有基 本功能,但不提供控件特定的功能或图形界面。与通过从用户控件或现有 Windows 窗体控 件继承创建控件相比,通过从 Control 类继承创建控件需要耗费更多的心思和精力。因为 控件开发人员必须为控件的 OnPaint 事件编写代码以及所需的任何功能特定代码,但同时 也允许控件开发人员根据自己的需要,灵活地自定义调整控件。例如,如果需要开发一个时 钟控件,此控件模拟时钟的外观和操作,通过添加 Timer 组件,并响应内部计时器组件的 Tick 事件来每秒调用自定义绘图方法来模拟时钟指针运动。



用户头像

JackWangGeek

关注

以匠人之精神,垒软件之砖 2020.01.10 加入

硕士,徐州软件协会副理事长,某创业公司合伙人

评论

发布
暂无评论
window form自定义控件类型