C#Winforms粗体树视图节点不显示全文

Mar*_*ijn 53 c# treeview winforms

我正在使用以下代码使我的treenodes加粗:

Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold);

foreach (QuestionnaireBuilder_Category cat in categories)
{
    TreeNode node = new TreeNode();

    node.Text = cat.Description;
    node.Name = cat.Id.ToString();

    node.NodeFont = font;

    tvQuestionSequence.Nodes.Add(node);
}
Run Code Online (Sandbox Code Playgroud)

但粗体节点的文本未正确显示.最后一个字母未显示.怎么会?以及如何解决这个问题?

Blu*_*unT 61

我在网上搜索时找到了这个帖子,因为我遇到了完全相同的问题.

但是,在节点的末尾添加空格不是一种选择,我找到了一种似乎可以解决问题的替代方法.

设置节点字体Bold后,我需要做的就是重置具有相同值的节点文本.

这是代码示例:

Font boldFont = new Font(treeview.Font, FontStyle.Bold);
node.NodeFont = boldFont;
node.Text = node.Text;
Run Code Online (Sandbox Code Playgroud)

在更改文本后,似乎重新绘制了节点,这正是我想要的.

  • 我必须设置字体,将节点添加到树中,然后重置文本以使其工作.如果我设置字体,并在将文本添加到树之前重置文本,文本仍然会被截断. (13认同)

Mar*_*ijn 19

我发现这是一个Windows问题.解决此问题的方法是:

在表单构造函数中,将树视图的字体设置为粗体.添加不能为粗体的节点时,请将字体更改为常规:

// Constructor of your form
public Form() 
{
    InitializeComponent();

    Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold);
    tvQuestionSequence.Font = font;
}

// Add regular nodes (not bold)
Font font = new Font(tvQuestionSequence.Font, FontStyle.Regular);

TreeNode treeNode = new TreeNode();
treeNode.Text = "Foo";
treeNode.NodeFont = font;

TreeNode parent = tvQuestionSequence.Nodes.Find("parent", true);
parent.Nodes.Add(treeNode);
Run Code Online (Sandbox Code Playgroud)

  • 我认为在上面的例子中,字体存储为树视图的属性,树视图将由表单处理,树视图将依次处理字体.我认为是这种情况,因为表单设计者将新字体分配给控件并且不处理它们. (3认同)
  • 只需在更改节点字体之前使用 treeView.BeginUpdate() ,然后在更改节点字体之后使用 treeView.EndUpdate() (2认同)

You*_*ker 7

在加粗节点之前,只需使用treeView.BeginUpdate(),然后在加粗节点之后使用treeView.EndUpdate()。


Ade*_*zah 5

这是一个已知的Windows错误.简单的解决方案就是在字符串的末尾附加一个额外的空格字符.空格字符将不可见,但它会增加绘制字符串所需的像素数,因此整个字符串将是可见的.