c#设置两种颜色的树节点文本
我有一个树视图,它分为三个级别。 我已经在每个小组级别中添加了孩子的数量。 现在我想用不同的颜色或粗体设置该数字 例如: 树[3]c#设置两种颜色的树节点文本,c#,winforms,treeview,C#,Winforms,Treeview,我有一个树视图,它分为三个级别。 我已经在每个小组级别中添加了孩子的数量。 现在我想用不同的颜色或粗体设置该数字 例如: 树[3] |_第一组[2] |_第一个孩子 |_第二个孩子 |_第二组[1] |_第三个孩子 这是一个windows窗体应用程序。 我认为这是不可能的,但我想确定一下。我认为可以通过将TreeView控件的DrawMode设置为OwnerDrawText,并在事件处理程序中执行绘图来实现这一点 DrawNode实现示例(在空格处拆分节点字符串,以粗体绘制第一个元素,使用常规字
|_第一组[2]
|_第一个孩子
|_第二个孩子
|_第二组[1]
|_第三个孩子
这是一个windows窗体应用程序。
我认为这是不可能的,但我想确定一下。我认为可以通过将TreeView控件的DrawMode设置为OwnerDrawText,并在事件处理程序中执行绘图来实现这一点 DrawNode实现示例(在空格处拆分节点字符串,以粗体绘制第一个元素,使用常规字体绘制字符串的其余部分,如果没有空格,则让操作系统来绘制):
注意:您可能希望在保存粗体字体的表单中添加变量或属性,而不是为绘制的每个树节点重新创建和处理它。如果您确实需要此功能,则可以扩展树视图控件。据我所知,它没有密封 那是我还不知道的事。。。正如我所需要的,我更新了代码以呈现原始示例中的文本
private void TreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
string regex = @"^.*\s+\[\d+\]$";
if (Regex.IsMatch(e.Node.Text, regex, RegexOptions.Compiled))
{
string[] parts = e.Node.Text.Split(' ');
if (parts.Length > 1)
{
string count = parts[parts.Length - 1];
string text = " " + string.Join(" ", parts, 0, parts.Length - 1);
Font normalFont = e.Node.TreeView.Font;
float textWidth = e.Graphics.MeasureString(text, normalFont).Width;
e.Graphics.DrawString(text,
normalFont,
SystemBrushes.WindowText,
e.Bounds);
using (Font boldFont = new Font(normalFont, FontStyle.Bold))
{
e.Graphics.DrawString(count,
boldFont,
SystemBrushes.WindowText,
e.Bounds.Left + textWidth,
e.Bounds.Top);
}
}
}
else
{
e.DrawDefault = true;
}
}