所有者绘制treeNode时错误地测量文本大小

时间:2016-09-28 15:20:53

标签: c# winforms treeview treenode

我在c#中有一个treeView / treeNode,想要突出显示部分节点文本。 为此我已经找到了一个很好的解决方案:https://stackoverflow.com/a/13824463/2925238 但不幸的是,字符串部分似乎被错误地测量和/或绘制。

为了更好地展示这一点,我交替突出显示每5个字符: drawing glitch

这里原始没有OwnerDrawing: original

看起来Graphics.DrawString方法在开头添加了一些空格,Graphics.MeasureString-method计算了一个假长度(字符串部分越长,错误添加的时间越长)。

有谁知道,为什么以及如何摆脱这个?

提前致谢: - )

这是我的DrawNode代码:

string txt = e.Node.Text;
int crt = 0;
float posX = e.Bounds.Left, posY = e.Bounds.Top;
string sub;
bool flag = false;
using (Font font = new System.Drawing.Font(tvSearchResults.Font, System.Drawing.FontStyle.Regular))
{
    while (crt < txt.Length)
    {
        using (Brush brush = new SolidBrush(flag ? Color.Black : Color.Blue))
        {
            sub = (crt + 5 < txt.Length) ? txt.Substring(crt, 5) : txt.Substring(crt);
            e.Graphics.DrawString(sub, font, brush, posX, posY);
            SizeF siz = e.Graphics.MeasureString(sub, font);
            posX += siz.Width;
            crt += 5;
            flag = !flag;
        }
    }
}

0 个答案:

没有答案