首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何绘制TreeView节点以显示两行文本

如何绘制TreeView节点以显示两行文本
EN

Stack Overflow用户
提问于 2022-03-31 22:09:57
回答 1查看 169关注 0票数 0

我试图找出一种使用StringFormat类向给定的TreeNode文本添加新行的方法。例如,字符串ID1:123456, ID2:789000,可以用逗号分隔,并在中间插入一个换行符,因此它有两行。

我知道没有必要将TreeNode文本分成多行,但这是我的主管所要求的,我别无选择。

我目前的解决方案是重写一个DrawNode函数,并使用DrawString函数自定义TreeNode文本格式,但我的问题是,在这个阶段我不知道如何插入换行符。

代码语言:javascript
运行
复制
private void TreeView_SO_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
        e.DrawDefault = false;
        string drawString = e.Node.Text;
        Font drawFont = ((TreeView)sender).Font;
        SolidBrush drawBrush = new SolidBrush(Color.Black);

        StringFormat drawFormat = new StringFormat();
        // what to put in here to insert a new line?

        e.Graphics.DrawString(drawString, drawFont, drawBrush, e.Node.Bounds, drawFormat);

}

更新

谢谢大家的帮助。最后,我发现这很容易,多亏了EskeRahn在带有E.G.多行树内容的上发布的代码。这段代码非常有用;但是,我只需要EskeRnhn代码的一部分来执行我的理想操作。所以我的代码就这样结束了,

代码语言:javascript
运行
复制
private void TreeView_SO_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
            e.DrawDefault = false;
            string drawString = e.Node.Text;
            Font drawFont = ((TreeView)sender).Font;
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            Rectangle eNodeBounds = NodeBounds(e.Node);

            e.Graphics.DrawString(drawString, drawFont, drawBrush, eNodeBounds);
}

private Rectangle NodeBounds(TreeNode node)
{
    if (node?.TreeView != null && node?.Text != null && (0 < node.Bounds.Location.X || 0 < node.Bounds.Location.Y))
    {
        using (Graphics g = node.TreeView.CreateGraphics())
        {
            SizeF textSize = g.MeasureString(node.Text, node.NodeFont ?? node.TreeView.Font);
            return Rectangle.Ceiling(new RectangleF(PointF.Add(node.Bounds.Location,
                                     new SizeF(0, (node.TreeView.ItemHeight - textSize.Height) / 2)),
                                     textSize));
        }
    }
    else
    {
        return node?.Bounds ?? new Rectangle();
    }
}

,这里我根本不需要担心StringFormat类,因为我已经覆盖了一个DrawNode函数,所以当我将字符串传递给TreeNode文本时,我只需要添加换行符。我已经测试了多个案例,这段代码运行良好。

EN

回答 1

Stack Overflow用户

发布于 2022-03-31 22:36:56

您可以用逗号分隔文本,然后使用新行连接。

代码语言:javascript
运行
复制
var splitText = e.Node.Text.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
var newString = string.Join(System.Environment.NewLine, splitText);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71699669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档