【问题标题】:WindowsForms designer and GenericFormWindows 窗体设计器和通用窗体
【发布时间】:2008-11-24 12:30:47
【问题描述】:

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

假设我有以下通用形式

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();
        }
    }

【问题讨论】:

    标签: c# .net winforms generics


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不幸的是,设计师有各种各样的“陷阱”。某处可能对它们进行了很好的总结,但我从未充分参与其中以使其成为必要。

      但是,我遇到了这个特殊问题,除了应用于用户控件。我想出的解决方案(这又很老套,但方式不同)是从通用类派生一个具体类。在你的情况下,你会这样做:

      public class StringForm : GenericForm<string>
      

      然后您应该可以在设计器中使用StringForm 而不会出现任何问题。

      【讨论】:

      • 有道理。抽象类也会遇到同样的问题 :(.
      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2023-03-12
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      相关资源
      最近更新 更多