我正在使用以下代码使我的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);
}
但粗体节点的文本未正确显示。最后一个字母未显示。怎么会?以及如何解决这个问题?
答案 0 :(得分:60)
我在网上搜索时找到了这篇帖子,因为我遇到了同样的问题。
但是,在节点末尾添加空格不是一种选择,我找到了一种似乎可以解决问题的替代方法。
设置节点字体Bold后,我需要做的就是重置具有相同值的节点文本。
以下是代码示例:
Font boldFont = new Font(treeview.Font, FontStyle.Bold);
node.NodeFont = boldFont;
node.Text = node.Text;
似乎在更改文本后重新绘制了节点,这正是我想要的。
答案 1 :(得分:17)
我发现这是一个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);
答案 2 :(得分:6)
在粗体化节点之后,只需使用treeView.BeginUpdate(),然后在粗体化节点后使用treeView.EndUpdate()。
答案 3 :(得分:5)
这是一个已知的Windows错误。 简单的解决方案是在字符串的末尾附加一个额外的空格字符。空格字符将不可见,但会增加绘制字符串所需的像素数,因此整个字符串将可见。
答案 4 :(得分:3)
这对我没有帮助。 在设计时使字体变得更大更大胆的原因是什么? (在“属性”窗口中)
因此,请确保使用足够大的字体定义树视图,然后您可以添加具有较小字体的节点。它们适合。
答案 5 :(得分:3)
我同意所提供的解决方案。我只是想补充一点,以便更清楚地了解问题所在。 树视图有自己的字体,用于确定根级别的项目宽度。这补偿了只有一个项目高度属性可用且没有项目宽度属性的事实。
问题的解决方案是确定根节点的字体应该是什么,然后将树设置为相同的字体。你也可以在设计时做到这一点。
希望有人帮助。
答案 6 :(得分:2)
此问题的解决方法是:
在属性中将树视图的默认字体设置为粗体。
当你需要时,改为不粗体。
答案 7 :(得分:1)
我执行以下操作,将DrawNode事件设置为调用,它将节点设置为粗体并删除突出显示的颜色。
您可以使用e.Graphics.FillRectangle函数的第一个参数设置您喜欢的任何颜色。
private void SetNodeBoldWhenSelected(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node == null) return;
var font = e.Node.NodeFont ?? e.Node.TreeView.Font;
if (e.Node.IsSelected)
{
font = new Font(font, FontStyle.Bold);
}
var bounds = new Rectangle( e.Bounds.X,e.Bounds.Y,e.Bounds.Width+20,e.Bounds.Height);
e.Graphics.FillRectangle(SystemBrushes.ControlDarkDark, bounds);
TextRenderer.DrawText(e.Graphics, e.Node.Text, font, bounds, SystemColors.HighlightText, TextFormatFlags.GlyphOverhangPadding);
}
现在,当我选择一个节点时,我的空间增加了20个像素,对于我的字体,这很有效,人们可以计算出真实的"需要的大小,但没有说明它需要这样做但你可以使用Graphics.MeasureString,如果你觉得你需要这样做。
答案 8 :(得分:1)
根据MSDN Library,尝试将您的代码更改为:
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.BeginUpdate(); //added newline here <--
tvQuestionSequence.Nodes.Add(node);
tvQuestionSequence.EndUpdate(); //added newline here <--
}
它适合我
答案 9 :(得分:0)
非常简单,工作正常
treeView1.SelectedNode.NodeFont = new System.Drawing.Font(treeView1.SelectedNode.TreeView.Font, treeView1.SelectedNode.TreeView.Font.Style | FontStyle.Bold);
this.treeView1.SelectedNode.Text += string.Empty;
答案 10 :(得分:0)
我意识到这是一个旧线程,它可能已被回答。我刚刚学习使用TreeViews时遇到了这个问题。对我有用的是将整个TreeView的字体大小更改为相同大小,或者大于要加粗的级别的字体。默认字体大小为8.something。我将我改为10,这是我想要我的节点的大小,并且截断已经消失。
答案 11 :(得分:0)
对我有用的东西:按照BlunT的答案,在Control的构造函数中加入load事件并调整节点。
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";
};
}
答案 12 :(得分:0)
它在vb.Net中然而,重新输入TEXT字段值的解决方案很好地解决了这个问题。如:
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