具有 System.Windows.Forms 和自定义基础 类 的自定义 WinForms 控件

Custom WinForms Controls with both System.Windows.Forms and Custom base classes

我想为 Windows 表单创建自定义控件,它们都具有我的 CustomControl 基础 class(使用我的自定义属性方法),但不想从头开始创建控件,所以我想扩展已经存在的。

我知道不可能扩展两个 抽象 classes,但我需要一些关于如何完成这些事情的见解。

在这种情况下,我想要这样的东西:

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...
}

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

有什么想法吗?

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

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

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

  • 使用 NativeWindow 可以处理控件的消息并覆盖其 WndProc 而无需从该控件派生。实现扩展组件时可以使用原生window

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

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