2009-03-16 11 views
0

Je suis en train d'écrire une application où j'ai une quantité indéterminée de Forms qui nécessite une certaine fonctionnalité popup (similaire à MSN, une petite fenêtre en bas à droite de l'écran). J'ai écrit le premier formulaire, puis j'ai pensé que je pourrais copier le fichier pour en faire un nouveau. Jusqu'ici tout va bien. Un peu plus tard, j'ai réalisé que je pouvais avoir sous-classé Form, écrit mon code popup, puis sous-classé ma nouvelle classe PopupForm pour faire les autres formes, pour simplifier la réécriture du code popup. Alors j'ai fait ça, mais maintenant mes formulaires ne s'affichent pas correctement dans le Designer! Ils sont complètement blancs (aucune image de fond ou contrôles) et je ne peux pas faire glisser de nouveaux contrôles sur celui-ci. J'ai essayé de placer lesSous-classe de la sous-classe de formulaire apparaît vide

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

attributs de la classe Form sur ma nouvelle forme, mais il n'a pas aidé. Je dois être capable de modifier le contenu de mes formulaires, et je ne vois pas ce qui ne va pas, alors c'est à la fois agaçant et confus.

Répondre

2

Si vous avez plusieurs constructeurs, veillez à appeler celui qui appelle le constructeur de base sans paramètre, c'est-à-dire celui qui contient 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

Ceci se produit automatiquement. Chaque fois que vous instanciez une instance d'une classe dérivée, le constructeur de base sans paramètre est également appelé, sauf si vous spécifiez un constructeur différent sur la base. – BFree

+0

@BFree Oui, c'est ce que je croyais aussi. Ça doit être autre chose. – Bevin

Questions connexes