2009-03-16 3 views
0

Я пишу приложение, где у меня неопределенное количество Forms, для которого требуется определенная всплывающая функциональность (аналогично MSN, маленькое окно в правом нижнем углу экрана). Я написал первую форму, затем подумал, что могу скопировать файл, чтобы создать новый. Все идет нормально. Немного позже я понял, что могу иметь подклассифицированную форму, написать свой всплывающий код, а затем подклассифицировать мой новый класс PopupForm, чтобы сделать другие формы, чтобы упростить переписывание всплывающего кода. Поэтому я сделал это, но теперь мои формы не отображаются должным образом в Дизайнере! Они полностью белые (без фонового изображения или элементов управления), и я не могу перетащить на него новые элементы управления. Я попытался размещенияПодкласс подкласса формы отображается пустым

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

атрибуты из Form класса на моей новой форме, но это не помогло. Мне нужно изменить содержимое моих форм, и я не понимаю, что не так, так что это и раздражает, и запутывает.

ответ

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 
     { } 
    } 
+0

Это происходит автоматически. Всякий раз, когда вы создаете экземпляр производного класса, базовый безпараллельный конструктор также вызывается, если только вы не укажете на базе другого конструктора. – BFree

+0

@BFree Да, это то, во что я тоже верил. Это должно быть что-то еще. – Bevin