C# winforms label.size 不截断标签文本
C# winforms label.size not truncating label text
我有一个标签,其中包含从用户本地计算机 -- edit - 获得的文本,文本长度既不固定也不可预测。它是使用 VS 设计器添加到窗体中的,并且是 AutoSize = true。如果标签的宽度超过260我想切换到fixedwidth/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;
}
我可以通过以编程方式创建控件来实现我的 objective:
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;
}
我有一个标签,其中包含从用户本地计算机 -- edit - 获得的文本,文本长度既不固定也不可预测。它是使用 VS 设计器添加到窗体中的,并且是 AutoSize = true。如果标签的宽度超过260我想切换到fixedwidth/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;
}
我可以通过以编程方式创建控件来实现我的 objective:
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;
}