Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Winforms bold treeview node doesn't show whole text

I found this Post when searching through the web because I am facing the exact same problem.

However, appending a white space to the end of the node was not an option, and I found an alternative way that seems to fix the issue.

After setting my node font Bold, all I need to do is reset the node text with the same value.

Here is the Code Sample:

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

It seems that the node is redrawn after changing the text, which is exactly what I wanted in the first place.


I've found that this is a Windows issue. A workaround for this problem is this:

In the form constructor set the font of the treeview to bold. When adding nodes which must not be bold, change the font to regular:

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

Simply use treeView.BeginUpdate() before you bold the node then treeView.EndUpdate() after you've bolded the node.


This is a known Windows bug. The simple solution is just to append an extra space character at the end of your strings. The space character will not be visible, but it will increase the number of pixels needed to draw the string, so the entire string will be visible.


This is all not helping for me. What DID the trick is making the font a little bigger and bold at DESIGN time. (In the Properties window)

So make sure you define the treeview with big enough font, then later you can add nodes with smaller font. They will fit.


I do agree with the solution provided. I just want to add to it to shed a little more light on what the problem is. The treeview has its own font which determines the width of items at the root level. That compensates for the fact that there is only an item height property available and no item width property.

The solution to your problem is to determine what the font of your root node should be, then set the tree to that same font. You can do that at design time also.

Hope that helps someone.


A workaround for this problem is this:

Set the defaul font of treeview to bold in the properties.

And chnage to not bold when you need.