Treenode文本不同颜色的单词
我有一个TreeView
,每个Node.Text
都有两个单词。 第一个和第二个词应该有不同的颜色。 我已经使用DrawMode
属性和DrawNode
事件更改了文本的颜色,但我无法弄清楚如何以两种不同的颜色分割Node.Text
。 有人指出我可以使用TextRenderer.MeasureText
但我没有idead如何/在哪里使用它。
有人有想法吗?
代码:
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); }
试试这个:
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); } } }
您必须管理节点状态以执行适当的操作。
UPDATE
对不起,我的错误看到更新版本。 没有必要测量空间大小,因为它已经包含在texts[0]
。