标签包装

有没有办法在 .NET标签控件中执行换字操作?

我知道还有一种使用 文本框的替代方法,将属性 BorderStyle设置为 none,将属性 只读设置为 true,将属性 字谜和属性 多线电话设置为 true。

有标签吗?

217087 次浏览

参考 在 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();
}
}

改变你的最大尺寸,

label1.MaximumSize = new Size(100, 0);

并设置您的自动大小为真。

label1.AutoSize = true;

就是这样!

具有讽刺意味的是,通过将 AutoSize设置为 false来关闭 AutoSize允许我获得标签控制尺寸来调整 垂直的和水平尺寸,这有效地允许文字包装发生。

只需将 LabelAutoSize 属性设置为 False。然后文本将被包装,您可以手动调整控件的大小以显示文本。

如果你想要一些动态大小与一个字包装标签结合,你可以做到以下几点:

  1. 把标签放在面板里
  2. 处理面板的 ClientSizeChanged event,使 标签填满了空间:

    private void Panel2_ClientSizeChanged(object sender, EventArgs e)
    {
    label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000);
    }
    
  3. Set Auto-Size for the label to true

  4. Set Dock for the label to Fill

如果在 VisualStudio 中打开 Text属性的下拉列表,则可以使用 Enter 键拆分行。这显然只适用于静态文本,除非您知道动态文本的最大尺寸。

您可以使用 TextBox并将 multiline设置为 truecanEdit设置为 false