一尘不染

WinForm UserControl的通用基类

c#

我为WinForm UserControl创建了通用基类:

public partial class BaseUserControl<T> : UserControl
{
    public virtual void MyMethod<T>() 
    { 
        // some base stuff here 
    }
}

和一个基于此的UserControl:

public partial class MyControl : BaseUserControl<SomeClass>
{
    public override void MyMethod<SomeClass>() 
    { 
        // some specific stuff here 
        base.MyMethod<SomeClass>();
    }
}

它可以正常工作,但是MyControl不能在VisualStudio
Designer中进行编辑,因为它说它无法加载基类。我试图定义另一个非通用的BaseUserControl类,希望它可以加载它,但是这个技巧似乎不起作用。

我已经有了一个解决方法:定义一个接口IMyInterface ,然后将我的控件创建为

public partial class MyControl : UserControl, IMyInterface<SomeClass>

但是我失去了基本的虚拟方法(虽然没什么大不了,但仍然…)。

有没有一种方法可以为UserControl创建基本的通用类,并且可以在VisualStudio Designer中对其进行编辑?


阅读 730

收藏
2020-05-19

共1个答案

一尘不染

我们正在做同样的事情,我们通过首先专门化一个类并从专门化的类派生而解决。使用示例中的代码,这意味着:

public partial class UserControl : UserControlDesignable 
{

...
}
public class UserControlDesignable : BaseUserControl<Someclass> { }

设计师有时仍会表现得有些松懈,但大多数情况下仍然有效。

2020-05-19