【问题标题】:Label word wrapping [duplicate]标签自动换行 [重复]
【发布时间】:2012-03-19 12:44:18
【问题描述】:

有没有办法在.NET 标签控件中进行自动换行?

我知道还有一种使用 TextBox 的替代方法,将属性 BorderStyle 设置为 none,将属性 ReadOnly 设置为 true 并设置属性 WordWrap em> 和属性 Multiline 为 true。

标签有什么东西吗?

【问题讨论】:

  • 我不认为有,但是自从我做 WinForms 以来已经有一段时间了。

标签: c# winforms c#-4.0 c#-3.0


【解决方案1】:

请参阅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();
  }
}

【讨论】:

  • 我正在尝试向现有标签添加新属性,例如 AutoSize,例如 IsWordWrap=true。有什么想法吗?这样我就可以给 LabelName.IsWordWrap=true;
  • TextRenderer.MeasureText 在我的情况下给出了错误的大小。为了使一切完美,您还需要覆盖 OnPaint 并绘制如下文本:TextRenderer.DrawText(e.Graphics, this.Text, this.Font, new Rectangle(0, 0, this.Width, Int32.MaxValue), ForeColor, TextFormatFlags.WordBreak);
【解决方案2】:

您可以使用TextBox 并将multiline 设置为true 并将canEdit 设置为false。

【讨论】:

  • multiline 和 canEdit 不是 TextBox 上的实际属性。
【解决方案3】:

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

【讨论】:

  • 谢谢!这正是我一直在寻找的(如何在设计器中分割线)。
  • 堆更好的答案!
【解决方案4】:

如果您想要一些动态大小和自动换行标签,您可以执行以下操作:

  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. 将标签的Auto-Size设置为true

  4. 将标签的Dock 设置为Fill

【讨论】:

    【解决方案5】:

    更改您的最大尺寸,

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

    并将您的 autosize 设置为 true。

    label1.AutoSize = true;
    

    就是这样!

    【讨论】:

    • 你可能也需要using System.Drawing;。
    • 这应该是公认的答案
    • 同意,这是最好且更容易实现的答案,刚刚测试过,效果很好
    • 这对我来说似乎太神奇了...另外(而且更晦涩),您需要在执行此操作之前关闭自动调整大小。
    • 将此更改为 label1.MaximumSize = new System.Drawing.Size(100, 0);这行得通。
    【解决方案6】:

    具有讽刺意味的是,通过将AutoSize 设置为false 来关闭false,我可以让标签控件尺寸同时垂直和水平调整其大小,从而有效地进行自动换行。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-28
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多