2010-07-22 19 views
0

Je définis la BackColor de TreeNodes spécifiques dans un TreeView comme un indice à l'utilisateur que quelque chose d'intéressant est arrivé au nœud pendant qu'il utilise l'application. Toutefois, lorsque je définis BackColor, le contrôle TreeView parent entier est redéfini plutôt que la zone d'étiquette du TreeNode spécifique qui a été modifié. Je n'appelle pas Actualiser ou Mettre à jour à tout moment - il suffit de définir BackColor sur le TreeNode. Il semble que plutôt que d'invalider les limites du TreeNode qui a été modifié, TreeView actualise toute sa zone. Cela se traduit par un flash rapide ennuyeux du contrôle.Modification de TreeNode.BackColor provoque le redimensionnement complet de TreeView

Une idée pourquoi cela se produit et si elle peut être facilement arrêtée?

Répondre

1

Il ne semble pas que vous puissiez empêcher cela de se produire. J'ai regardé le code pour le poseur TreeNode.BackColor:

[SRDescription("TreeNodeBackColorDescr"), SRCategory("CatAppearance")] 
public Color BackColor 
{ 
    get 
    { 
     if (this.propBag == null) 
     { 
      return Color.Empty; 
     } 
     return this.propBag.BackColor; 
    } 
    set 
    { 
     Color backColor = this.BackColor; 
     if (value.IsEmpty) 
     { 
      if (this.propBag != null) 
      { 
       this.propBag.BackColor = Color.Empty; 
       this.RemovePropBagIfEmpty(); 
      } 
      if (!backColor.IsEmpty) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
     else 
     { 
      if (this.propBag == null) 
      { 
       this.propBag = new OwnerDrawPropertyBag(); 
      } 
      this.propBag.BackColor = value; 
      if (!value.Equals(backColor)) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
    } 
} 

Chaque fois que les changements de BackColor, un invalidate est forcé sur l'arbre qui contient le nœud. À nouveau, en examinant la fonction InvalidateHostTree, il n'y a aucun indicateur que vous pouvez définir pour arrêter l'actualisation.

+0

Merci. C'est ce que je craignais. Je suppose qu'une solution réalisable pourrait être OwnerDraw avec ma propre propriété CustomBackColor. –