I hate little hacks like this, but here it is nonetheless. If someone has a better solution I would love to hear it.
I've been tinkering with the WinForms TreeView control a bit and ran into a documented (but undesirable) behavior. I'm wanting to display my hierarchical node structure in the tree, but I want to 'highlight' some of them for one reason or another. My preferred highlight in this case is to use a bolding effect on the font and to change the text color.
The undesired effect, however, is when you apply a font to the node that is larger than the base font of the node the text will clip. Well, bolded text is larger - it's wider than the text and as a result the right-most character(s) get clipped and it looks really tacky.
My hack isn't without it's limitations and considerations, but all I need to do to 'workaround' this issue is to apply some non-breaking spaces in the text to display such that they get clipped and not the actual text. This is definitely error-prone as well because just one nbsp doesn't necessarily address the issue (but does in my situation for most texts).
string text = “This is ridiculous” + (char)160;
TreeNode node = new TreeNode(text);
I can see this being quite an issue with non-latin-based fonts, though I've nothing to substantiate that claim.
One side-effect of doing this is that the 'clip box' around the text grows to accommodate the non-breaking spaces. You can surely set your TreeView to use .FullRowSelect, and to turn off .ShowLines, but that may not be desirable in some situations.
Does anyone have/know of a better solution with the plain, vanilla TreeView? I've tried other tactics but none led to any better results. Maybe I'm missing something blatently obvious.