我想为Windows窗体创建自定义控件,这些窗体既有我的CustomControl基类(使用我的自定义属性方法),但又不想从头开始创建控件,所以我想扩展已经存在的控件。
我知道扩展两个抽象类是不可能的,但我需要一些有关如何完成这些事情的见解。
在这种情况下,我想要这样的东西:
CustomControl.cs
public abstract class CustomControl : Control
{
// some custom properties and methods here...
}
CustomLabel.cs
public sealed class CustomLabel : Label, CustomControl // <- i know this isn't possible
{
// some custom properties and methods here...
}
所以在一个新表单中,我将自定义标签添加到表单并正常工作......
有什么想法吗?
答案 0 :(得分:2)
您可以根据要求考虑使用这些选项:
您可以创建包含常用属性和方法的基础UserControl
。然后,不是从这些控件派生,而是将它们托管在UserControl
中,并将原始控件公开为公共属性。
通过实现IExtenderProvider
创建扩展程序提供程序组件,您可以向控件添加一些属性,而无需从这些控件派生。 ToolTip
或ErrorProvider
或HelpProvider
是此类组件的示例。
使用NativeWindow
,您可以处理控件的消息并覆盖其WndProc
,而无需从该控件派生。实现扩展程序组件时,可以使用本机窗口。
您可以使用Extension Methods向现有控件添加一些方法,而不从这些控件派生。
您可以创建包含某些属性和方法的类,然后在创建这些派生控件时,定义该类的类型属性。派生控件可以使用该类来拥有一些常用属性和方法。此外,如果您在该类中实现一些更改和更改的事件(如实现INotifyPropertyChanged
),派生控件可以订阅这些事件并根据更改执行某些操作。