【问题标题】:Set WordWrap = false for a Label为标签设置 WordWrap = false
【发布时间】:2010-04-13 14:51:43
【问题描述】:

我应该如何将WordWrap = false 设置为System.Windows.Forms.Label

我在面板上有一个标题,它应该显示"MyPanel capt..."。所以我用AutoEllipsis = true,但是还不够。

我也使用“AutoSize = true”,因为我希望标签占用尽可能小的空间。

恰到好处,Visual Basic 6.0 做到了。

【问题讨论】:

  • 你想要什么视觉效果?
  • 我遇到了类似的问题,没有找到满意的解决方案。你可能想看看我的回答here

标签: .net winforms


【解决方案1】:

我也有类似的效果:

label1.AutoSize = false;
label1.AutoEllipsis = true;

并将标签区域的高度调整为仅一行。

【讨论】:

  • 我也使用“AutoSize = true”,因为希望标签占用尽可能少的空间。
【解决方案2】:

我很确定您无法阻止标签换行。另一种(如果稍微粗略)选项是将标签设置为自动调整大小(因此宽度随文本增长),然后在其旁边放置一个控件,该控件按 z 顺序位于其前面。这样,当标签宽度超过某个点时,标签重叠的内容将被其他控件隐藏。

就像我说的,这是一种非常粗糙的方法来达到效果。

另外,如果您尝试使用 AutoEllipsis,我假设您已禁用 AutoResize?我相信它优先。

【讨论】:

  • 不,我两个都用。 AutoEllipsis 为最大尺寸。自动调整最小位置。
  • 啊,好吧,我认为 AutoSize 只会将标签的大小增加到不再需要 AutoEllipsis 的程度。
  • 当标签达到父级宽度时,需要使用 AutoEllipsis。请参阅我的答案。
【解决方案3】:

尝试设置标签MaximumSize属性。

【讨论】:

    【解决方案4】:

    我找到了解决办法:

    this.label.AutoEllipsis = true;
    this.label.AutoSize = true;
    

    面板的调整大小事件处理程序中:

    ...
    textHeight = this.label.Font.SizeInPoints; // Take in pixels, not points
    ...
    Size newMaxSize = new Size(this.Width,
        textHeight + label.Padding.Top + label.Padding.Bottom);
    this.label.MaximumSize = newMaxSize;
    ...
    

    【讨论】:

      【解决方案5】:

      我认为没有任何方法可以做到这一点 - 标签本身不是单行或多行的。这仅取决于标签的Text 属性中是否有任何换行符。

      如果您希望它是单行,请将 Text 中的 CRLF 字符替换为其他内容。

      【讨论】:

      • 如果我有一个没有换行符的长短语,它将传递到新行。请参阅更新中的说明。
      • 这不是真的。我没有返回或换行字符,但它仍然自动换行成为多行
      • @BernoulliLizard 现在这可能是真的 - 我在 10 年前回答了这个问题,如果它现在不同并且自动换行,那可能是从那时起添加到 .NET 的一个功能。跨度>
      【解决方案6】:

      啊,我想我终于明白你想要的效果了。

      您需要一个可以自动调整大小的标签。在最大值之后,您要显示 AutoEllipsis。对吗?

      如果是这样,那么您需要设置MaximumSize、AutoEllipsis 和AutoSize 属性。然后标签将尽可能小。当文本超过您指定的最大大小时,文本将被截断并附加一个省略号。您不需要代码来执行此操作。

      【讨论】:

      • 是的;你理解正确。但问题在于设置 MaxSize。父面板是可调整的,所以请参阅我的答案。
      【解决方案7】:

      我正在使用 FlowLayoutPanel 来保存从左到右流动的标签。因此,自动调整大小和重叠会破坏我对齐良好的列。我认为最直接的方法是自己实现绘画。有帮助者为您做省略号。

      最后一个 TextFormatFlags 有十几个选项,可以为您节省大量烦人的绘图代码。

          private void templateLabel_Paint(object sender, PaintEventArgs e)
          {
              Label lbl = sender as Label;
              e.Graphics.Clear(lbl.BackColor);
      
              TextRenderer.DrawText(e.Graphics, lbl.Text, lbl.Font,
                  lbl.ClientRectangle,
                  Color.Black,
                  lbl.BackColor, TextFormatFlags.EndEllipsis);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        相关资源
        最近更新 更多