c# - C# winforms label.size 不截断标签文本
问题描述
我的标签包含从用户本地机器获得的文本——编辑——文本长度既不固定也不可预测。它是使用 VS 设计器添加到表单中的,并且 AutoSize = true。如果标签的宽度超过 260 我想切换到固定宽度/AutoEllipse。但是,当标签宽度超过最大限制时,文本不会截断文本,而是继续到表单的边缘(实际上可能超出此范围)。从我读到的MaximumSize、AutoSize 和AutoEllipse 不能一起工作。我正在使用的代码:
string maxDesc = "Lorem ipsum dolor sit amet, consectetur adipiscing";
int destW;
int destWmax;
DestNameLBL.Text = maxDesc;
destW = DestNameLBL.Width;
if (destW >= 260)
{
destWmax = 260;
DestNameLBL.Size = new Size(destWmax, 16);
DestNameLBL.AutoEllipsis = true;
}
else
{
DestNameLBL.AutoSize = true;
destWmax = destW;
}
我可以通过以编程方式创建控件来实现我的目标:
Label destDesc = new Label();
destDesc.Location = new Point(100, 119);
destDesc.Text = maxDesc;
destDesc.Font = new Font("Microsoft Sans Serif", 9.75F, FontStyle.Regular);
if (destW >= 260)
{
destWmax = 260;
destDesc.Size = new Size(destWmax, 16);
destDesc.AutoEllipsis = true;
}
else
{
destDesc.AutoSize = true;
destWmax = destW;
}
Controls.Add(destDesc);
这些代码集本质上是相同的。为什么这适用于以编程方式创建的控件,但不适用于通过设计器添加的控件(或者甚至是相关的差异化)?
解决方案
[基于上述多条评论。]
当以编程方式将控件设置为固定大小时,在 VS 设计器中放置在表单上且 AutoSize=true 的标签不会自动覆盖 AutoSize。
它必须被显式覆盖。
在设计器中添加的控件的 AutoSize 默认值为 true,但对于“在代码中”定义的控件,默认值为 false。因此,相同的代码可能会因添加控件的方式而有所不同。
一起使用 MaximumSize 和 AutoEllipsis 将截断带有省略号的文本显示,但(在我的测试中)不会在 MouseOver 上显示包含完整文本的工具提示。
此代码适用于使用省略号和工具提示进行截断
string maxDesc = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";
int destW;
int destWmax;
DestNameLBL.Text = maxDesc;
destW = DestNameLBL.Width;
if (destW >= 260)
{
destWmax = 260;
DestNameLBL.AutoSize = false;
DestNameLBL.Size = new Size(destWmax, 16);
DestNameLBL.AutoEllipsis = true;
}
else
{
DestNameLBL.AutoSize = true;
destWmax = destW;
}
推荐阅读
- python - 在文本光标位置打印终端输出
- jekyll - 在 Jekyll 前文中包含 HTML(帖子标题)
- angular - 在Angular中的不同组件上有组件保存按钮触发动作吗?
- python - 使用 vgg16 验证集的准确性低
- ionic-framework - 如何在 Ionic 4 中捕获 AlertController 的数据返回?
- hashtable - 具有双重哈希和双素数的哈希表,没有二级哈希函数
- python - 如何将日期时间列表项更改为 datetime.date
- java - Gradle 找不到插件存在于中央插件存储库中
- scala - Foreach 在列表的第一个元素上
- c++ - 如何将 DLL 添加到 C++ 程序(访问 SQL 数据库)