通用用户控件在Designer中导致错误

时间:2017-03-17 15:37:41

标签: c# .net winforms generics

我创建了一个定义主视图的泛型类:

public abstract class MainView<T, U> : UserControl, IMainView
    where T : ControllerMainView<U>
    where U : class
{
...
}

我正在使用它来创建我的工作主视图

public partial class UserControlMainViewJobs : MainView<ControllerJobs, Job>
{
...
}

为了实现这一点,ControllerJobs显然需要成为ControllerMain视图的衍生物。

public class ControllerJobs : ControllerMainView<Job>
{
...
}

此外,所有类都有空构造函数,设计人员可以使用它。

仍然无法在Designer中打开UserControlMainViewJobs。错误消息是:

  

GenericArguments [0],&#39; FM.Auftragsverwaltung.Controller.ControllerJobs&#39;,&#39; FM.Auftragsverwaltung.View.MainViews.MainView`2 [T,U]&#39;违反了类型参数&#39; T&#39;的约束。

这没有任何意义。但这似乎是通用用户控件的一般问题。在StackOverFlow上搜索给了我(及其变体):

C# generics usercontrol

他们建议创建一个静态的&#34;中间类&#34;有一个派生自MainView的类,但不是从泛型类派生的。

所以我创建了

public class MainViewJobsStatic : MainView<ControllerJobs, Job>
{
...
}

然后将UserControlMainViewJobs更改为

public partial class UserControlMainViewJobs : MainViewJobsStatic
{
...
}

奇怪的是,我仍然得到同样的错误。这让我真的很开心,因为我发现这个解决方法非常令人沮丧。

有没有人知道如何在派生于泛型类的类上使用设计器?

*编辑* ControllerMainView的定义

public abstract class ControllerMainView<T> where T : class
{
...
}

0 个答案:

没有答案