C# WinForms设计器添加Label设置Size后不截断文本而动态创建正常的原因
问题原因与解决方案
核心差异根源
两种创建方式的Label初始AutoSize属性默认值不同,这是导致效果不一致的直接原因:
- VS设计器拖入窗体的Label,设计器会自动将
AutoSize属性默认设置为true - 代码
new Label()创建的Label实例,.NET框架中该类的AutoSize属性默认值为false
你的设计器控件逻辑存在漏洞:在判断文本宽度超过260的分支中,没有关闭已经开启的AutoSize属性。当AutoSize = true时,控件尺寸会自动跟随文本内容调整,你手动设置的Size属性会被布局逻辑直接忽略,自然无法触发AutoEllipsis的省略号截断效果。
而动态创建的控件,在超宽分支中AutoSize保持默认的false,你设置的固定尺寸可以正常生效,所以AutoEllipsis功能符合预期。
修复方法
只需要给设计器控件的超宽分支加上关闭AutoSize的逻辑即可,修正后代码如下:
string maxDesc = "Lorem ipsum dolor sit amet, consectetur adipiscing"; int destW; int destWmax; DestNameLBL.Text = maxDesc; destW = DestNameLBL.Width; if (destW >= 260) { destWmax = 260; // 先关闭AutoSize,手动设置的尺寸才会生效 DestNameLBL.AutoSize = false; DestNameLBL.Size = new Size(destWmax, 16); DestNameLBL.AutoEllipsis = true; } else { DestNameLBL.AutoSize = true; destWmax = destW; // 关闭AutoEllipsis,避免之前的设置残留影响显示 DestNameLBL.AutoEllipsis = false; }
内容的提问来源于stack exchange,提问作者Art Hansen
相关产品推荐
相关产品推荐

