2013-02-11 3 views
0

Я хочу покрасить часть узла дерева, но не через пользователя (без использования «выбранного узла») , поэтому DrawMode мне не помогает.узел дерева цветов с 2 цветами, но не через пользователя

Я использую C#

Например, я хочу, чтобы все узлы дерева с пространством над текстом будет цвет на одной стороне на зеленый и с другой стороны на красный.

Спасибо!

ответ

0

DrawMode - это путь. Вы должны установить его в OwnerDrawText и подписаться на событие DrawNode. I.e .:

this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText; 
this.treeView1.DrawNode += new System.Windows.Forms.DrawTreeNodeEventHandler(this.treeView1_DrawNode); 

Это всего лишь образец того, как может выглядеть метод рисования. Это зависит от вас, чтобы изменить его, чтобы иметь хороший графический результат, но он может дать вам представление о том, как идти.

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    { 
     Font nodeFont = e.Node.NodeFont; 
     if (nodeFont == null) nodeFont = ((TreeView)sender).Font; 

     string txt = e.Node.Text; 
     int idx = txt.IndexOf(' '); 
     string greenTxt; 
     string redTxt; 
     if (idx >= 0) 
     { 
      greenTxt = txt.Substring(0, idx); 
      redTxt = txt.Substring(idx); 
     } 
     else 
     { 
      greenTxt = txt; 
      redTxt = string.Empty; 
     } 
     Rectangle greenRect = new Rectangle(e.Bounds.Location, new Size((int)Math.Ceiling(e.Graphics.MeasureString(greenTxt, nodeFont).Width), e.Bounds.Height)); 
     Rectangle redRect = new Rectangle(e.Bounds.Location + new Size(greenRect.Width, 0), new Size((int)Math.Ceiling(e.Graphics.MeasureString(redTxt, nodeFont).Width), e.Bounds.Height)); 
     e.Graphics.DrawString(greenTxt, nodeFont, Brushes.Green, greenRect); 
     if (!string.IsNullOrEmpty(redTxt)) 
      e.Graphics.DrawString(redTxt, nodeFont, 
       Brushes.Red, redRect); 
    } 

Вы можете найти более сложный пример here.

+0

привет, спасибо, мне очень помогает –

+0

У меня проблема с вашим кодом, –

+0

У меня проблема с вашим кодом, когда я расширяю дерево, зарегистрированное мной в верхней части дерева, все, что я расширяю на одном другой, а затем я отказываюсь от него. Что вы скажете? –