Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#设置两种颜色的树节点文本_C#_Winforms_Treeview - Fatal编程技术网

c#设置两种颜色的树节点文本

c#设置两种颜色的树节点文本,c#,winforms,treeview,C#,Winforms,Treeview,我有一个树视图,它分为三个级别。 我已经在每个小组级别中添加了孩子的数量。 现在我想用不同的颜色或粗体设置该数字 例如: 树[3] |_第一组[2] |_第一个孩子 |_第二个孩子 |_第二组[1] |_第三个孩子 这是一个windows窗体应用程序。 我认为这是不可能的,但我想确定一下。我认为可以通过将TreeView控件的DrawMode设置为OwnerDrawText,并在事件处理程序中执行绘图来实现这一点 DrawNode实现示例(在空格处拆分节点字符串,以粗体绘制第一个元素,使用常规字

我有一个树视图,它分为三个级别。 我已经在每个小组级别中添加了孩子的数量。 现在我想用不同的颜色或粗体设置该数字

例如:

[3]
|_第一组[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;
    }
}