C# 自动调整按钮中多行文字的大小

C# 自动调整按钮中多行文字的大小,c#,.net,text,multiline,autosize,C#,.net,Text,Multiline,Autosize,我有一个按钮,需要根据按钮中的文本量更改文本的字体大小。这是在运行时动态更改的 基本上,文本需要开始相当大,然后需要测试按钮中有多少文本,并决定是否缩小大小。它可以在一个循环中做到这一点,将大小减少一,重新绘制,并每次测试文本是否适合现在。如果没有,则再次循环,直到循环完成 但问题在于测试它。按钮有多行文字,这就是我想要的方式。因此,我不能简单地使用TextRenderer.MeasureText之类的东西,用按钮的宽度测试文本的宽度,因为这假设文本只有一行。它从不根据是否可以安装在两条或多条线

我有一个按钮,需要根据按钮中的文本量更改文本的字体大小。这是在运行时动态更改的

基本上,文本需要开始相当大,然后需要测试按钮中有多少文本,并决定是否缩小大小。它可以在一个循环中做到这一点,将大小减少一,重新绘制,并每次测试文本是否适合现在。如果没有,则再次循环,直到循环完成

但问题在于测试它。按钮有多行文字,这就是我想要的方式。因此,我不能简单地使用TextRenderer.MeasureText之类的东西,用按钮的宽度测试文本的宽度,因为这假设文本只有一行。它从不根据是否可以安装在两条或多条线路上进行测量

因此,如果某一字体上的一行文字高度为40像素,即使按钮上的三行文字上的一行文字高度为40像素,TextRenderer.MeasureText.height也将显示40像素。按钮上的边距和填充,以及文本行之间的间距,我不能只做40*3就得到3行的长度,这并不是那么简单

所以。。。如何测试按钮中的文本对于按钮是否太大

我可以将自动省略号属性设置为true,但无法测试是否使用了自动省略号。所以这没用

我可以将“自动大小”设置为true并测试按钮大小是否更改,然后将其恢复到正确的大小并降低文本大小,但是,在将文本移动到第二行之前,它会根据宽度调整大小,因此它始终在一行上。所以这没用


有什么想法吗?我只想自动调整多行文字的大小。这看起来很简单。

以下是针对Windows窗体的解决方案: 将
TextBox
上的起始大小设置为该事件处理程序将更改的大小

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var textBox = sender as TextBox;
    if(!string.IsNullOrEmpty(textBox.Text))
    {
        Graphics g = textBox.CreateGraphics();
        var width = g.MeasureString("a", textBox.Font).Width;//Get One Symbol Width
        var totalWidth = width * textBox.Text.Length; // Calculate the width of the full text
        if(totalWidth<width*10) // do what you want depending on conditions
        {
            textBox.Font=new Font(textBox.Font.Name,20f);
        }
        else if(totalWidth < width * 20)
        {
            textBox.Font = new Font(textBox.Font.Name, 16f);
        }
        else if(totalWidth < width * 30)
        {
            textBox.Font = new Font(textBox.Font.Name, 14f);
        }
        else if (totalWidth < width * 40)
        {
            textBox.Font = new Font(textBox.Font.Name, 12f);
        }
        else if (totalWidth < width * 50)
        {
            textBox.Font = new Font(textBox.Font.Name, 10f);
        }
    }
}
private void textBox1\u TextChanged(对象发送者,事件参数e)
{
var textBox=发送方作为textBox;
如果(!string.IsNullOrEmpty(textBox.Text))
{
Graphics g=textBox.CreateGraphics();
var width=g.MeasureString(“a”,textBox.Font).width;//获取一个符号宽度
var totalWidth=width*textBox.Text.Length;//计算全文的宽度

如果(totalWidthWhat framework?WinForms?WebForms?WPF?…您应该说明框架,在WinForms中,我会使用
图形。MeasureString
对不起,我以为它会自动将这变成一个C论坛。它是.NET和C。