Form的子类的子类显示为空

时间:2009-03-16 17:51:13

标签: c# forms designer subclass

我正在编写一个应用程序,其中我有不确定数量的Forms,需要一定的弹出功能(类似于MSN,屏幕右下角的一个小窗口)。我写了第一个表格,然后认为我可以复制文件来制作一个新表格。到现在为止还挺好。稍后我意识到我可以将子类化为Form,编写我的弹出代码,然后将我的新PopupForm类子类化为其他形式,以简化重写弹出代码。所以我这样做了,但现在我的表单在Designer中没有正确显示!它们是完全白色的(没有背景图像或控件),我无法将新控件拖到它上面。我尝试放置

[Designer("System.Windows.Forms.Design.FormDocumentDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(IRootDesigner))]
[DesignerCategory("Form")]

我的新表单上的Form类的属性,但它没有帮助。我需要能够改变我的表格内容,而且我没有看到什么是错的,所以这既烦人又令人困惑。

1 个答案:

答案 0 :(得分:2)

如果你有多个构造函数,请确保调用调用基本无参数构造函数的构造函数,即包含InitializeComponent的构造函数。

  class BaseForm
  {
       public BaseForm()
       {
            InitializeComponent();
       }

       // not good -> does not call InitializeComponent() or :this()
       public BaseForm(int someParameter)
       { }

       public BaseForm(string someParameter)
           : this() // good -> calls InitializeComponent()
       { }

       public BaseForm(byte b)
       {
           // good -> InitializeComponent is called explicitly 
           // (but call to this() above is preferred)
           InitializeComponent();
       }
  }

  class DerivedForm : BaseForm
  {
       public DerivedForm()
          : base(5) // not good -> calls the "bad" base constructor
       { }

       // good -> base() constructor is implicitly called
       public DerivedForm(double x)
       { }

       public DerivedForm(string someParam)
          : base(someParam)  // good -> BaseForm(string) will call InitializeComponent
       { }
  }