2009-02-03 5 views
1

J'ai un problème vraiment étrange et je me demande si c'est un bug visuel ou si je fais quelque chose de mal. Voici un code simple d'une classe Panel overriden:Le bug de Visual? (un problème avec le panneau overrid)

public class MyPanel : Panel 
    { 
     private TableLayoutPanel table = new TableLayoutPanel(); 

     public MyPanel() 
     { 
      this.Controls.Add(table); 
      table.BackColor = Color.Green; 
     } 

     public override System.Drawing.Color BackColor 
     { 
      get 
      { 
       return table.BackColor; 
      } 
      set 
      { 
       table.BackColor = value; 
      } 
     } 
    } 

Si je mets le contrôle sur un formulaire et de construire le projet, visuel génère une erreur et ouvrir à nouveau le projet sera impossible. Cependant, si je change TableLayoutPanel en TextBox, cela fonctionne très bien. En outre, si j'ai défini BackColor dans le constructeur avant d'ajouter le contrôle à la collection Controls, cela fonctionne également correctement. Quel est le problème? ou est-ce juste un bug?

Répondre

0

Je soupçonne que la récursivité peut être un problème; par défaut (s'il n'est pas défini explicitement), un contrôle hérite de la couleur du parent. Cela conduit au scénario où la couleur de l'enfant (si non définie) demande au parent, qui demande à l'enfant (pour toujours). Cependant, TextBox remplace ce comportement pour renvoyer SystemColors.Window s'il n'existe pas de jeu de couleurs explicite. D'où aucune récursivité.

De toute façon, je ne suis pas sûr que ce soit une bonne idée - le concepteur pourrait commencer à dupliquer les contrôles si vous ne faites pas attention.

+0

alors pourquoi cela fonctionnerait-il avec TextBox? – agnieszka

+0

et je dois ajouter que j'ai vérifié que la propriété GetColor get est utilisée après avoir terminé le constructeur de MyPanel – agnieszka

+0

en fait vous aviez raison. Merci! J'ai passé beaucoup de temps avec ce problème – agnieszka

Questions connexes