自定义WinForms控件与System.Windows.Forms和自定义基类

时间:2016-11-12 00:18:40

标签: c# winforms custom-controls

我想为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...
}

所以在一个新表单中,我将自定义标签添加到表单并正常工作......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以根据要求考虑使用这些选项:

  • 您可以创建包含常用属性和方法的基础UserControl。然后,不是从这些控件派生,而是将它们托管在UserControl中,并将原始控件公开为公共属性。

  • 通过实现IExtenderProvider创建扩展程序提供程序组件,您可以向控件添加一些属性,而无需从这些控件派生。 ToolTipErrorProviderHelpProvider是此类组件的示例。

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

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

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