gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:18:55 25 4
gpt4 key购买 nike

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

所以在一个新的表单中,我将 Customlabel 添加到表单并正常工作......

有什么想法吗?

最佳答案

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

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

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

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

  • 您可以使用 Extension Methods在不从这些控件派生的情况下向现有控件添加一些方法。

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

关于c# - 具有 System.Windows.Forms 和自定义基类的自定义 WinForms 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com