我試圖找出一種使用 StringFormat 類向給定TreeNode文本添加新行的方法。例如,字串ID1:123456, ID2:789000,可以用逗號分隔并在其間插入換行符,因此它有兩行。
我知道沒有必要將TreeNode文本分成多行,但這是我的主管要求的,我別無選擇。
我目前的解決方案是重寫一個DrawNode函式,并使用該DrawString函式自定義TreeNode文本格式,但我的問題是我現階段不知道如何插入換行符。
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 發布的代碼:WINDOWS TREEVIEW WITH EG MULTI-LINE TREE CONTENT。這段代碼非常有用;但是,我只需要 EskeRnhn 的部分代碼來執行我的理想操作。所以我的代碼最終是這樣的,
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類,因為我已經覆寫了aDrawNode函式,所以當我將字串傳遞給TreeNode文本時,我只需要添加換行符。我已經測驗了多個案例,這段代碼運行良好。
uj5u.com熱心網友回復:
您可以用逗號分割文本,然后使用換行符加入。
var splitText = e.Node.Text.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
var newString = string.Join(System.Environment.NewLine, splitText);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454926.html
