【发布时间】:2012-03-19 12:44:18
【问题描述】:
有没有办法在.NET 标签控件中进行自动换行?
我知道还有一种使用 TextBox 的替代方法,将属性 BorderStyle 设置为 none,将属性 ReadOnly 设置为 true 并设置属性 WordWrap em> 和属性 Multiline 为 true。
标签有什么东西吗?
【问题讨论】:
-
我不认为有,但是自从我做 WinForms 以来已经有一段时间了。
有没有办法在.NET 标签控件中进行自动换行?
我知道还有一种使用 TextBox 的替代方法,将属性 BorderStyle 设置为 none,将属性 ReadOnly 设置为 true 并设置属性 WordWrap em> 和属性 Multiline 为 true。
标签有什么东西吗?
【问题讨论】:
请参阅Automatically Wrap Text in Label。它描述了如何创建自己的成长标签。
以下是上述参考资料的完整来源:
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing) return;
try {
mGrowing = true;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height;
}
finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
【讨论】:
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, new Rectangle(0, 0, this.Width, Int32.MaxValue), ForeColor, TextFormatFlags.WordBreak);
您可以使用TextBox 并将multiline 设置为true 并将canEdit 设置为false。
【讨论】:
如果您在 Visual Studio 中打开 Text 属性的下拉列表,则可以使用 Enter 键拆分行。这显然只适用于静态文本,除非您知道动态文本的最大尺寸。
【讨论】:
如果您想要一些动态大小和自动换行标签,您可以执行以下操作:
处理面板的ClientSizeChanged event,使
标签填充空间:
private void Panel2_ClientSizeChanged(object sender, EventArgs e)
{
label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000);
}
将标签的Auto-Size设置为true
Dock 设置为Fill
【讨论】:
更改您的最大尺寸,
label1.MaximumSize = new Size(100, 0);
并将您的 autosize 设置为 true。
label1.AutoSize = true;
就是这样!
【讨论】:
using System.Drawing;。
具有讽刺意味的是,通过将AutoSize 设置为false 来关闭false,我可以让标签控件尺寸同时垂直和水平调整其大小,从而有效地进行自动换行。
【讨论】:
只需将 Label AutoSize 属性设置为 False。然后文本将被换行,您可以手动调整控件的大小以显示文本。
【讨论】: