C#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); } 

但粗体节点的文本显示不正确。 最后一个字母没有显示。 怎么来的? 而如何解决这个问题呢?

当通过networkingsearch时,我发现这个post,因为我面临完全相同的问题。

但是,在节点末尾添加一个空白区域并不是一种select,我find了一种解决问题的方法。

在设置我的节点字体粗体之后,我所需要做的就是使用相同的值重置节点文本。

代码示例如下:

 Font boldFont = new Font(treeview.Font, FontStyle.Bold); node.NodeFont = boldFont; node.Text = node.Text; 

看起来节点是在改变文本后重新绘制的,这正是我想要的。

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

在窗体构造函数中将treeview的字体设置为粗体。 添加不能为粗体的节点时,请将字体更改为常规:

 // 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); 

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

我同意所提供的解决scheme。 我只是想补充一点,以解决问题是什么。 树视图具有自己的字体,它决定了根级别项目的宽度。 这补偿了只有一个项目高度属性可用和没有项目宽度属性的事实。

你的问题的解决scheme是确定你的根节点的字体应该是什么,然后将树设置为相同的字体。 你也可以在devise时做到这一点。

希望能帮助别人。

这一切对我都没有帮助。 在devise的时候,这个技巧会使字体变得更大更大胆。 (在“属性”窗口中)

所以确保你定义了足够大的字体,然后你可以添加更小的字体。 他们会适合。

非常简单,工作正常

 treeView1.SelectedNode.NodeFont = new System.Drawing.Font(treeView1.SelectedNode.TreeView.Font, treeView1.SelectedNode.TreeView.Font.Style | FontStyle.Bold); this.treeView1.SelectedNode.Text += string.Empty; 

解决这个问题的方法是这样的:

在属性中将treeview的默认字体设置为粗体。

而当你需要的时候不要大胆。

我意识到这是一个古老的线程,它可能已经被回答。 我刚刚遇到这个问题,因为我正在学习使用TreeViews。 什么对我来说是改变整个TreeView的字体大小相同的大小,或大于你想要粗体的级别的字体。 默认的字体大小是8.something。 我把我改为10,这是我想要的节点的大小,截断已经消失了。

什么对我有用:在控制的构造函数钩入负载事件,并按照BlunT的答案中所述调整节点。

 public MyControl() { InitializeComponent(); _head = new TreeNode(); this.Load += (s, e) => { trvParts.Nodes.Clear(); _head.NodeFont = new Font(trvParts.Font, FontStyle.Bold); trvParts.Nodes.Add(_head); _head.Text = "Node Name"; }; } 

它在vb.Net但是重新inputTEXT字段值的解决scheme可以很好地解决这个问题。 如:

  With myNode Dim myText As String = .Text 'capture the text .NodeFont = New Font(<name of your treeview>.Font, FontStyle.Bold) .Text = myText 'reset the text to the original value End With 

在粗体显示节点之前使用treeView.BeginUpdate(),然后在粗体显示节点之后使用treeView.EndUpdate()。