Windows窗体设计器和通用窗体

时间:2008-11-24 12:30:47

标签: c# .net winforms generics

如果你继承自己的书面通用形式,为什么设计师不工作?

假设我有以下通用形式

public class GenericForm<T> : System.Windows.Forms.Form
{
    public T Test
    {
        get;
        set;
    }
}

当我去设计师时,我得到了错误。

我编写的唯一解决方法是使用编译器指令。

#if DESIGN    
    public partial class Form1 : System.Windows.Forms.Form
#else
    public partial class Form1 : GenericForm<string>
#endif

    {
        public Form1()
        {
            InitializeComponent();
        }
    }

2 个答案:

答案 0 :(得分:2)

不幸的是,设计师有这样的各种“陷阱”。可能会在某个地方对它们进行很好的总结,但我从来没有充分卷入其中以使其成为必要。

但是,除了应用于用户控件之外,我遇到了这个特殊问题。我提出的解决方案(这又是非常hacky,但以不同的方式)是从泛型类中派生出一个具体的类。在你的情况下,你会这样做:

public class StringForm : GenericForm<string>

然后,您应该能够毫无问题地在设计器中使用StringForm

答案 1 :(得分:2)

我相信这是因为设计师试图将表单(或UserControl)实例化以在设计器中托管它。如果您有一个通用(或抽象)形式,设计者无法实例化它。