如果你继承自己的书面通用形式,为什么设计师不工作?
假设我有以下通用形式
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();
}
}
答案 0 :(得分:2)
不幸的是,设计师有这样的各种“陷阱”。可能会在某个地方对它们进行很好的总结,但我从来没有充分卷入其中以使其成为必要。
但是,除了应用于用户控件之外,我遇到了这个特殊问题。我提出的解决方案(这又是非常hacky,但以不同的方式)是从泛型类中派生出一个具体的类。在你的情况下,你会这样做:
public class StringForm : GenericForm<string>
然后,您应该能够毫无问题地在设计器中使用StringForm
。
答案 1 :(得分:2)
我相信这是因为设计师试图将表单(或UserControl)实例化以在设计器中托管它。如果您有一个通用(或抽象)形式,设计者无法实例化它。