Подкласс подкласса Form отображается пустым - PullRequest
0 голосов
/ 16 марта 2009

Я пишу приложение, в котором у меня есть неопределенное количество 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 Ответ

2 голосов
/ 16 марта 2009

Если у вас есть несколько конструкторов, убедитесь, что вы вызываете тот, который вызывает базовый конструктор без параметров, то есть тот, который содержит 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
       { }
  }
...