为Label设置WordWrap = false

时间:2010-04-13 14:51:43

标签: .net winforms

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

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

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

Apropos,Visual Basic 6.0做到了。

7 个答案:

答案 0 :(得分:5)

我使用了类似的效果:

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

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

答案 1 :(得分:1)

我很确定你无法阻止标签的包装。另一个(如果稍微粗略)选项是将标签设置为自动大小(因此宽度随文本一起增长),然后在z序列中将它放在它前面的Control旁边。这样,当标签宽度超过某个点时,标签重叠的内容将被其他控件隐藏。

就像我说的,实现这种效果是一种非常粗糙的方法。

此外,如果您尝试使用AutoEllipsis,我假设您已禁用AutoResize?我认为它优先。

答案 2 :(得分:1)

我找到了解决方案:

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

在Resize的面板的事件处理程序中:

...
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;
...

答案 3 :(得分:1)

尝试设置标签MaximumSize Property。

答案 4 :(得分:0)

我认为没有办法做到这一点 - 标签本身不是单线或多线。它只取决于标签的Text属性是否包含任何换行符。

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

答案 5 :(得分:0)

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

您想要一个AutoSize最大量的标签。在最大值之后,您想要显示AutoEllipsis。正确的吗?

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

答案 6 :(得分:0)

我使用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);
    }