具有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创建扩展提供程序组件,您可以将一些属性添加到控件而不从这些控件派生。 A ToolTipErrorProviderHelpProvider是这些组件的例子。

  • 使用NativeWindow您可以处理控件的消息并覆盖它的WndProc,而无需从该控件派生。实现扩展器组件时,您可以使用本机窗口。

  • 您可以使用Extension Methods将一些方法添加到现有控件而不从这些控件派生。

  • 您可以创建一个包含某些属性和方法的类,然后在创建这些派生控件时定义该类的属性。您的派生控件可以使用该类来获得一些公共属性和方法。此外,如果您在该类中执行一些更改和更改的事件(例如实施INotifyPropertyChanged),则派生控件可以订阅这些事件并根据更改执行一些操作。

+0

您使用了哪种解决方案? –

+0

IExtenderProvider – user1592987

+0

干得好,所有选项都很有用,并有其自己的用法。这些就像一个工具箱,当你需要时你应该选择合适的工作。 –