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;
        }