2016-10-27 3 views
0

Я хочу изменить цвет фона узлов в элементе управления TreeView, чтобы при выборе пользователем узла цвета фона менялись от выбранного выбранного узла до самого верхнего родителя в TreeView ,C# Изменить фон SelectNode в TreeView

Вот визуальный пример того, что я после:

TreeView node background example

ответ

1

По изображению Я полагаю, вы используете Windows Forms. Таким образом, это код, который нужен для достижения требуемой функциональности, имеющой форму с Treeview называется treeView1 в этом образце:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private readonly Color selectedColor = Color.Red; 
    private readonly Color normalColor = Color.Transparent; 

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     if (e.Action != TreeViewAction.ByKeyboard && 
      e.Action != TreeViewAction.ByMouse) 
      return; 

     ResetAllNodes(treeView1.Nodes.Cast<TreeNode>()); 
     ChangeBackground(e.Node); 
    } 

    private void ResetAllNodes(IEnumerable<TreeNode> nodes) 
    { 
     var treeNodes = nodes as TreeNode[] ?? nodes.ToArray(); 
     if (!treeNodes.Any()) 
      return; 

     foreach (var node in treeNodes) 
     { 
      node.BackColor = normalColor; 
      ResetAllNodes(node.Nodes.Cast<TreeNode>()); 
     } 
    } 

    private void ChangeBackground(TreeNode node) 
    { 
     node.BackColor = selectedColor; 
     if (node.Parent == null) 
      return; 

     ChangeBackground(node.Parent); 
    } 
} 

Надеется, что это помогает!