具有System.Windows.Forms和自定义基类的自定义WinForms控件
问题描述:
我想为Windows窗体创建自定义控件,这两个自定义控件都具有我的CustomControl基类(使用我的自定义属性方法),但不想从中创建控件从头开始,所以我想扩展已有的。具有System.Windows.Forms和自定义基类的自定义WinForms控件
我知道不可能扩展两个抽象类,但我需要一些见解来说明如何完成这些事情。
在这种情况下,我想有这样的事情:
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...
}
这样一种新的形式,我会将Customlabel添加到窗体并正确工作...
有什么想法?
答
你可以考虑使用基于要求这些选项:
您可以创建一个包含公共属性和方法的基础
UserControl
。然后,不要从这些控件派生出来,而是将它们放在UserControl
中,并将原始控件作为公共属性公开。通过实施
IExtenderProvider
创建扩展提供程序组件,您可以将一些属性添加到控件而不从这些控件派生。 AToolTip
或ErrorProvider
或HelpProvider
是这些组件的例子。使用
NativeWindow
您可以处理控件的消息并覆盖它的WndProc
,而无需从该控件派生。实现扩展器组件时,您可以使用本机窗口。您可以使用Extension Methods将一些方法添加到现有控件而不从这些控件派生。
您可以创建一个包含某些属性和方法的类,然后在创建这些派生控件时定义该类的属性。您的派生控件可以使用该类来获得一些公共属性和方法。此外,如果您在该类中执行一些更改和更改的事件(例如实施
INotifyPropertyChanged
),则派生控件可以订阅这些事件并根据更改执行一些操作。
您使用了哪种解决方案? –
IExtenderProvider – user1592987
干得好,所有选项都很有用,并有其自己的用法。这些就像一个工具箱,当你需要时你应该选择合适的工作。 –