2012-12-11 122 views
1

我有一個TreeView,它的每個Node.Text都有兩個單詞。 第一個和第二個單詞應該有不同的顏色。我已經在使用DrawMode屬性和DrawNode事件更改文本的顏色,但我無法弄清楚如何將Node.Text分成兩種不同的顏色。有人指出我可以使用TextRenderer.MeasureText,但我沒有想法如何/在哪裏使用它。Treenode文本不同顏色的字

有人有想法嗎?


代碼:

formload() 
{ 
    treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText; 
} 

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
Color nodeColor = Color.Red; 
if ((e.State & TreeNodeStates.Selected) != 0) 
    nodeColor = SystemColors.HighlightText; 

TextRenderer.DrawText(e.Graphics, 
        e.Node.Text, 
        e.Node.NodeFont, 
        e.Bounds, 
        nodeColor, 
        Color.Empty, 
        TextFormatFlags.VerticalCenter); 
} 
+0

你能解釋你的代碼嗎? –

+0

在winforms中是不可能的,你必須使用一個圖像。 – MrFox

+0

@MrFox這是從不可能的FAR – phadaphunk

回答

6

試試這個:

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    { 
     string[] texts = e.Node.Text.Split(); 
     using (Font font = new Font(this.Font, FontStyle.Regular)) 
     { 
      using (Brush brush = new SolidBrush(Color.Red)) 
      { 
       e.Graphics.DrawString(texts[0], font, brush, e.Bounds.Left, e.Bounds.Top); 
      } 

      using (Brush brush = new SolidBrush(Color.Blue)) 
      { 
       SizeF s = e.Graphics.MeasureString(texts[0], font); 
       e.Graphics.DrawString(texts[1], font, brush, e.Bounds.Left + (int)s.Width, e.Bounds.Top); 
      } 
     } 
    } 

您必須管理節點做撥款行動State

UPDATE

對不起,我錯看到更新後的版本。沒有必要測量空間大小,因爲它已經包含在texts[0]中。

+0

天才!沒有突出顯示整個文本的突出顯示有一個小問題。但我會弄清楚如何改正這一點。 還有一件事。有沒有一種方法可以用一個單詞來捕捉節點? (在最後一行崩潰程序),因爲這是一種罕見但可能的結果。 – phadaphunk

+0

如果您嘗試過使用您的程序,可能是您遇到了這個故障(將在另一個問題中發佈)我實施了類似於您在一週前給予我的解決方案,並出現圖形故障,其中節點未在正確的位置繪製。這就是爲什麼我今天再次問,但這個故障仍然存在。 – phadaphunk

+0

問題在這裏謝謝! http://stackoverflow.com/questions/13825167/multicolor-treeview-draw-glitch – phadaphunk