深入探讨派生控件与可视化继承
1. 派生控件概述
派生控件是从现有的 .NET 控件类中获取功能并进行扩展的理想方式。它可以与前身有显著不同,也可能只是进行一些细微改进。例如,LinkLabel 继承自 Label,CheckedListBox 继承自 ListBox。
1.1 创建派生控件
创建派生控件时,只需创建一个继承自合适父控件类的类,然后重写想要更改的功能并添加所需的特性。不过,并非所有情况都如此简单,有些控件的功能可能深藏于其内部,难以轻易更改,比如控件绘制。若要更改 ListBox 或 TextBox 在窗体上的绘制方式,不能简单地重写 OnPaint() 方法,因为绘制是在更低级别(通过 Windows 系统调用)进行的。此时,需要寻找支持所有者绘制模式的控件类,或者从头创建自定义绘制控件。
1.2 开发继承控件的原因
- 添加新功能:如实现掩码功能的自定义 ComboBox,支持节点搜索的自定义 TreeView。
- 实现特定行为:像重写 OnKeyPress() 方法以拒绝非数字字符的简单 TextBox。
- 抽象某些细节:简化 TreeView 的接口以处理特定数据结构,添加更高级的属性和方法,维护内部的 Nodes 集合,并对基类中的操作做出响应,引发更有意义的自定义事件。
- 设置常用默认值:例如添加一个始终具有相同列组的 DataGridView,可在其构造函数中配置属性。