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