【问题标题】:c# set a treenode text in 2 colors时间:2018-08-10 标签:c#set a treenode text in 2 colors
【发布时间】:2009-08-18 13:50:57
【问题描述】:

我有一个分为 3 个级别的树形视图。 我在每个组级别中添加了它拥有的孩子的数量。 现在我想将该数字设置为不同的颜色或粗体。

例子:

[3]
|_ firstGroup [2]
|_ 第一个孩子
|_ 次子
|_ secondGroup [1]
|_ 第三个孩子

这是一个 Windows 窗体应用程序。 我认为这是不可能的,但我想确定一下。

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    我认为您可以通过将 TreeView 控件的 DrawMode 设置为 OwnerDrawText 来做到这一点,并在 DrawNode 事件处理程序中执行绘图。

    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;
        }
    }
    

    注意:您可能希望将变量或属性添加到保存粗体字体的表单,而不是为每个绘制的 TreeNode 重新创建和处理它。

    【讨论】:

    • 那是我还不知道的……正是我所需要的
    • 我更新了代码以呈现原始示例中的文本
    【解决方案2】:

    如果您确实需要此功能,则可以扩展 TreeView 控件。据我所知,它没有密封。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2017-09-02
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      相关资源
      最近更新 更多