2010-11-11 10 views
3

J'ai une vue arborescente qui lorsque l'utilisateur interagit avec des nœuds individuels, les couleurs changent. Le code est:Définition de TreeView ForeColor en utilisant C#

treeview.selectednode.forecolor = color.red; 

Lorsque l'utilisateur appuie sur un bouton, je veux que l'ensemble des nœuds passe au noir par exemple. Donc, je code en tant que tel:

treeview.forecolor = color.black; 

Cela fonctionne très bien, sauf pour les nœuds que j'ai précédemment passés en rouge. Y a-t-il un moyen de contourner ceci?

+0

Est-ce que cela compile réellement? Le nom de la propriété est * [ForeColor] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.forecolor.aspx) *, pas * forecolor *. En outre, il est supposé être * [Color.Black] (http://msdn.microsoft.com/en-us/library/system.drawing.color.black.aspx) *, pas * color.black *. –

Répondre

2

Utilisez cette fonction récursive:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
    (sender as TreeView).SelectedNode.ForeColor = Color.Red; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (TreeNode tn in treeView1.Nodes) 
    { 
     tn.ForeColor = Color.Blue; 
     ColorNodes(tn); 
    } 
} 

private void ColorNodes(TreeNode t) 
{ 
    foreach (TreeNode tn in t.Nodes) 
    { 
     tn.ForeColor = Color.Blue; 
     ColorNodes(tn); 
    } 
} 
+0

Merci - J'ai pensé à cela, mais si j'ai un Treeview de plusieurs centaines ou milliers de nœuds, quelle serait l'efficacité de cette échelle? Merci encore. –

+0

Le plus bienvenue, son traitement chaque nœud exactement une fois donc c'est très efficace ... – Genius

+0

Je pense que je vais le faire, mais de manière asynchrone. –

0

Conserver une référence au nœud sélectionné précédemment, le transformer en noir chaque fois que vous changez TreeView au noir.

+0

Can Ne faites pas ça ... il y a des cas où l'arborescence est chargée avec les nœuds rouges. Merci quand même. –