具有 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
您可以向控件添加一些属性,而无需从这些控件派生。 ToolTip
或 ErrorProvider
或 HelpProvider
是此类组件的示例。
使用 NativeWindow
可以处理控件的消息并覆盖其 WndProc
而无需从该控件派生。实现扩展组件时可以使用原生window
您可以使用 Extension Methods 向现有控件添加一些方法,而无需从这些控件派生。
您可以创建一个包含一些属性和方法的 class,然后在创建那些派生控件时,定义一个 class 类型的 属性。您的派生控件可以使用 class 来拥有一些通用的属性和方法。此外,如果您在 class 中实现一些更改和更改的事件,例如实现 INotifyPropertyChanged
,派生控件可以订阅这些事件并根据更改执行一些操作。
我想为 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
您可以向控件添加一些属性,而无需从这些控件派生。ToolTip
或ErrorProvider
或HelpProvider
是此类组件的示例。使用
NativeWindow
可以处理控件的消息并覆盖其WndProc
而无需从该控件派生。实现扩展组件时可以使用原生window您可以使用 Extension Methods 向现有控件添加一些方法,而无需从这些控件派生。
您可以创建一个包含一些属性和方法的 class,然后在创建那些派生控件时,定义一个 class 类型的 属性。您的派生控件可以使用 class 来拥有一些通用的属性和方法。此外,如果您在 class 中实现一些更改和更改的事件,例如实现
INotifyPropertyChanged
,派生控件可以订阅这些事件并根据更改执行一些操作。