c# - 自动调整固定大小标签中的文本以避免文本跳到第二行

标签 c# string winforms label autosize

我有一个固定大小的标签,大约 100 像素宽和 20 像素高。

当我将一个长字符串放入标签时,文本换行到第二行但我看不到第二行,因为标签的大小是固定的。

我不想换到第二行,而是希望字体大小缩小,以便字符串显示在标签中的一行中。有谁知道执行此操作的简单方法?

编辑:

下面的代码对我有用(大部分时间)。我不想做任何递归的事情。有时文本仍然会溢出到另一行。我假设是因为我不能真正使用标签的整个宽度。我该如何补偿?

private void Label_TextChanged(object sender, EventArgs e)
{
    Label label = sender as Label;

    if (label != null && label.Text.Length != 0)
    {
        SizeF size = new SizeF();
        using (Graphics g = label.CreateGraphics())
        {
            size = g.MeasureString(label.Text, label.Font);
        }

        Single x = (label.Width) / size.Width;
        Single y = (label.Height) / size.Height;
        Single scaler = x > y ? y : x;

        using (Font font = label.Font)
        {
            label.Font = new Font(font.Name, font.SizeInPoints * scaler);
        }
    }
}

最佳答案

这很容易做到。使用 Graphics.MeasureString(...)确定字符串所需的宽度,然后逐渐使字体越来越小,直到字符串所需的宽度等于或小于标签的宽度。

关于c# - 自动调整固定大小标签中的文本以避免文本跳到第二行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058858/

相关文章:

c# - ASP.NET : Get the value from textarea

c# - 打印为 PDF 时字符串格式中的退格键

c# - Linq C#-获取集合中的前一个元素

Java 8 字符串垃圾收集

c# - 如何比较两个二维数组

c# - 使用 ADFS 2.0 的单点登录

c++ - string::replace 在 100% 的时间内无法正常工作?

c# - WinForms WebBrowser 阻止 ProcessCmdKey

C# 创建一个在后台运行的程序?

c# - 如何将类的属性作为字符串加入?