如何阻止System.Windows.Forms.Label控件的文本自动换行?
解决System.Windows.Forms.Label文本自动换行问题
方案一:使用AutoEllipsis属性(推荐)
这是WinForms内置的最简便方案,既能阻止换行,又能在文本超出控件宽度时显示省略号提示内容被截断:
- 确保Label的
AutoSize属性设为false(满足你固定90x20尺寸的需求) - 将
AutoEllipsis属性设为true - 保持
Size为90,20,TextAlign按需设置(比如TopLeft)
设置完成后,文本会始终在一行内显示,超出宽度的部分会被省略号替代,完全不会触发换行,也不会存在被隐藏的第二行内容,同时控件宽度固定为90,不会覆盖右侧对象。
方案二:手动截断文本(无省略号需求时)
如果不需要显示省略号,只想直接截断超出宽度的文本,可以通过代码计算可显示的文本长度后截取:
// 在设置Label文本或控件尺寸变化时执行 string originalText = "你的超长文本内容"; Size maxSize = new Size(90, int.MaxValue); // 计算文本在当前Font下的所需尺寸 Size textSize = TextRenderer.MeasureString(originalText, label1.Font, maxSize, TextFormatFlags.NoWrap); // 如果文本宽度超过控件宽度,逐步截断文本 if (textSize.Width > label1.Width) { string truncatedText = originalText; while (TextRenderer.MeasureString(truncatedText, label1.Font, maxSize, TextFormatFlags.NoWrap).Width > label1.Width && truncatedText.Length > 0) { truncatedText = truncatedText.Substring(0, truncatedText.Length - 1); } label1.Text = truncatedText; } else { label1.Text = originalText; }
注意要引用System.Windows.Forms命名空间,计算时需传入TextFormatFlags.NoWrap确保按不换行规则计算宽度。
额外注意事项
- 不要通过修改高度隐藏换行内容,这属于治标不治本,文本实际仍会换行绘制,可能引发布局或渲染问题
- 确认Label的
WordWrap属性设为false(默认值为false,若之前修改过需改回)
内容的提问来源于stack exchange,提问作者jerdub1993
相关产品推荐
相关产品推荐

