Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 标签字包装_C#_Winforms_C# 4.0_C# 3.0 - Fatal编程技术网

C# 标签字包装

C# 标签字包装,c#,winforms,c#-4.0,c#-3.0,C#,Winforms,C# 4.0,C# 3.0,有没有办法在标签控件中进行换行 我知道有另一种方法可以使用,将属性BorderStyle设置为none,将属性ReadOnly设置为true,并将属性WordWrap和属性Multiline设置为true label1.AutoSize = true; 有标签吗?请参阅。它描述了如何创建自己的成长标签 以下是取自上述参考资料的完整来源: using System; using System.Text; using System.Drawing; using System.Windows.For

有没有办法在标签控件中进行换行

我知道有另一种方法可以使用,将属性BorderStyle设置为none,将属性ReadOnly设置为true,并将属性WordWrap和属性Multiline设置为true

label1.AutoSize = true;
有标签吗?

请参阅。它描述了如何创建自己的成长标签

以下是取自上述参考资料的完整来源:

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);
并将“自动大小”设置为true

label1.AutoSize = true;

就这样

具有讽刺意味的是,通过将其设置为
false来关闭
自动调整大小
,可以使标签控件的维度在垂直和水平方向上调整大小,从而有效地允许进行换行。

只需将标签自动调整大小属性设置为false即可。然后,文本将被包装,您可以手动重新调整控件的大小以显示文本。

如果您希望结合文字包装标签进行动态调整,可以执行以下操作:

  • 将标签放在面板内
  • 处理面板的
    ClientSizeChanged事件
    ,使 标签填充空间:

    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

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

    您可以使用
    文本框
    并将
    多行
    设置为
    true
    canEdit
    设置为
    false

    我认为没有,但我已经有一段时间没有使用WinForms了,我正在尝试向现有标签添加一个新属性,比如AutoSize,比如IsWordWrap=true。有什么想法吗?这样我就可以给LabelName.IsWordWrap=true;textrender.MeasureText在我的例子中给出了错误的大小。为了使一切变得完美,您还需要覆盖OnPaint并像这样绘制文本:
    TextRenderer.DrawText(例如,Graphics、this.text、this.Font、新矩形(0、0、this.Width、Int32.MaxValue)、ForeColor、TextFormatFlags.WordBreak)您可能需要
    使用System.Drawing也是。这应该是公认的答案同意,这是最好的、更容易实现的答案,只是测试了一下,效果很好。这对我来说太神奇了。。。另外(更模糊的是),在执行此操作之前,您需要关闭autosize。将此更改为label1.MaximumSize=new System.Drawing.Size(100,0);这很有效,谢谢!这正是我想要的(如何在设计器中分割线)。堆更好的答案!multiline和canEdit不是TextBox上的实际属性。