我应该如何将WordWrap = false
设置为System.Windows.Forms.Label
?
我在面板上有一个标题,它应显示"MyPanel capt..."
。所以我使用AutoEllipsis = true
,但这还不够。
我也使用“AutoSize = true
”,因为我希望标签占用的空间最小。
Apropos,Visual Basic 6.0做到了。
答案 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);
}