Nag*_*agu 179 .net c# controls label winforms
我们如何在Windows窗体中获得标签的自动换行功能?
我在一个面板中放置了一个标签,并添加了一些动态标签的文字.但它超出了面板长度.我怎么解决这个问题?
Joh*_*zen 343
实际上,接受的答案是不必要的复杂.
如果将标签设置为AutoSize,它将随您放入的任何文本自动增长.(这包括垂直增长.)
如果要使其以特定宽度进行自动换行,可以设置MaximumSize属性.
myLabel.MaximumSize = new Size(100, 0);
myLabel.AutoSize = true;
Run Code Online (Sandbox Code Playgroud)
经过测试和工作.
Jon*_*son 155
快速回答:关闭 AutoSize.
这里的一个大问题是标签不会自动改变其高度(仅宽度).为了实现这一点,您需要对标签进行子类化并包含垂直调整大小逻辑.
基本上你在OnPaint中需要做的是:
您还需要在构造函数中设置ResizeRedraw样式标志.
ale*_*555 22
在我的情况下(面板上的标签)我设置label.AutoSize = false
和label.Dock = Fill
.标签文本会自动换行.
Seb*_*ldi 16
坏消息:没有autowrap属性.
好消息:隧道尽头有一盏灯!
您可以通过编程方式完成此操作以动态调整大小,但这是最简单的解决方案:
MaximumSize =(宽度,高度),其中宽度 =您希望标签的最大尺寸和高度 =您希望它包裹多少像素
小智 11
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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我必须找到一个快速的解决方案,所以我只使用了具有这些属性的TextBox:
var myLabel = new TextBox
{
Text = "xxx xxx xxx",
WordWrap = true,
AutoSize = false,
Enabled = false,
Size = new Size(60, 30),
BorderStyle = BorderStyle.None,
Multiline = true,
BackColor = container.BackColor
};
Run Code Online (Sandbox Code Playgroud)