6

我遇到了一个众所周知的问题,即在将 TreeNode 的字体设置为粗体后,TreeNode 的文本会被截断。但是,我相信我发现了所有普遍接受的“修复”都不起作用的情况。

常见解决方案:http: //support.microsoft.com/kb/937215

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold);
node.Text += string.Empty;

变体 1: C# Winforms 粗体树视图节点不显示整个文本(请参阅 BlunT 的答案)

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold);
node.Text = node.Text;

变体 2: http ://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/acb877a6-7c9d-4408-aee4-0fb7db127934

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold);
treeView1.BackColor = treeView1.BackColor;      

上述修复不起作用的场景:

如果将节点设置为粗体的代码位于构造函数中(表单或在本例中为用户控件),则修复将不起作用:

public partial class IncidentPlanAssociations : UserControl
{
    public IncidentPlanAssociations()
    {
        InitializeComponent();

        TreeNode node = new TreeNode("This is a problem.");
        node.NodeFont = new Font(treeView1.Font, FontStyle.Bold);
        treeView1.Nodes.Add(node);

        // This does not fix problem
        node.Text += string.Empty;

        // This does not fix problem
        node.Text = node.Text;

        // This does not fix problem
        treeView1.BackColor = treeView1.BackColor;

    }
}

但是,如果我将这三个“修复”中的任何一个放在按钮后面的代码中,并在一切运行后单击它,它就会正常工作。我确信这与最初绘制树视图时有关,但我正试图找出解决它的好方法。有什么建议么?

4

4 回答 4

8

感谢@Robert Harvey 的帮助。

如果有人遇到类似问题,这里的解决方法是将代码从构造函数移动到用户控件的加载事件。上述三个变体中的任何一个都可以工作。

我个人选择了:

private void IncidentPlanAssociations_Load(object sender, EventArgs e)
{
    TreeNode node = new TreeNode("This is no longer a problem.");
    node.NodeFont = new Font(treeView1.Font, FontStyle.Bold);
    treeView1.Nodes.Add(node);

    // This fixes the problem, now that the code 
    //      is in the Load event and not the constructor
    node.Text = node.Text;

}

代码只需要在 Load 事件中,而不是在构造函数中,就可以让这个众所周知的错误的解决方法对我正常工作。

于 2012-10-24T20:27:01.247 回答
0

如果将要使用的最大字体(BOLD 和/或最大磅值)分配给基本 TreeView 控件,然后为标准大小的行显式更改字体为较小的字体,则不会出现截断问题。

此外,如果您选择最大的字体,以免与标准字体相差太远,那么一切都会很好地间隔开。

于 2016-06-14T19:25:15.993 回答
0

在任何视觉更改中使用 treeView.BeginUpdate() 和 treeView.EndUpdate()。

例子:

this.treeView.BeginUpdate();
this.treeView.Nodes.Clear();
this.treeView.Nodes.AddRange(allNodes.ToArray());
this.treeView.EndUpdate();
于 2016-07-29T12:54:37.797 回答
0

我知道这是一篇非常古老的帖子,但我刚刚找到了一个适合我的解决方案,我在这里找到了。显然,通过将背景颜色设置为空,它解决了粗体文本被切断的问题。

这是修复:

treeView.BackColor = Color.Empty;
于 2016-09-30T20:07:03.697 回答