将功能扩展到.NET控件

Ed.*_*Ed. 5 .net c# winforms

目前我正在使用一个工具,需要创建一些带有一些额外字段的自定义.NET.我一直想知道什么方法可以更好地解决这个问题,并一直在考虑以下选项:

选项A: - 为每个控件创建一个派生类(比方说,CLabel,CGroupBox ......),我在每个类上定义新字段.这将意味着更糟糕的可持续性,但易于操作.

例:

class CLabel: Label
{
    public List<Control> RelatedControls {get; set;}
    public String textHint;
    // more stuff...

    public CLabel()
    {}
 }
Run Code Online (Sandbox Code Playgroud)

选项B: - 此选项意味着不从每个控件创建派生类,而是使用实际的Label,GroupBox等控件并创建封装所有"额外"属性的类.将在Control.Tag属性中引用此额外属性对象.我对这个问题有疑问,因为在Tag属性中引用一种复杂的对象对我来说感觉有点蹩脚,但这意味着更好的可持续性,当然也不需要子类化控件.

例:

Label lbl = new Label();
lbl.Tag = new ControlDescription();
Run Code Online (Sandbox Code Playgroud)

选项C: - 这意味着具有选项A和B的某种组合.只需创建自定义控件,例如CLabel,即向Label控件添加类型ControlDescription字段.这样我们就可以确保封装和可持续性,但是我们避免这种Tag情况.

我很确定有很多选择比那些更好.可能只是使用多态 - 一个我仍然遇到问题的概念 - 可以取消自定义控件类.您认为哪些选项最好?你认为所有这些都可以做得更好吗?

d_s*_*ell 2

如果您需要在设计时轻松控制属性并且必须使用 Windows 窗体,则应该锁定此http://msdn.microsoft.com/en-us/library/system.componentmodel.iextenderprovider.aspx

通过这种方式,您可以为不同的控件提供属性,而无需将它们包装在第一个控件中。