将内容自动调整为固定大小的TextBox控件

时间:2017-03-25 18:24:27

标签: c# winforms textbox

我可以找到大量的示例来调整文本框的大小以适应它的内容,但不是相反。我有一个WinForm'弹出窗口',它是一个小尺寸,包含一个壁纸缩略图和一个文本框,将保存壁纸标题。有时,标题可能很短,或者很长时间从表单的末尾开始:

enter image description here enter image description here

表单填充了从另一个方法传递的信息:

    this.BringToFront();
    this.txtWallpaperTitle.Text = title;
    this.lnkWallpaper.Text = "http://www.reddit.com/" + threadid;

    Bitmap img = new Bitmap(Properties.Settings.Default.currentWallpaperFile);            
    this.imgWallpaper.BackgroundImage = img;
    this.imgWallpaper.BackgroundImageLayout = ImageLayout.Stretch;

目前,TextBox文本sdize是通过设计器设置的。有没有办法自动调整文本大小以使其适合TextBox控件?

1 个答案:

答案 0 :(得分:0)

也许以这种方式处理TextChanged Event或类似地解决它。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.Text != "".Trim())
    {
        int w = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Width;
        int h = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Height;
        int sizeContent = w * h;
        int sizeTb = (textBox1.Width * textBox1.Height);
        if (sizeContent < sizeTb)
        {
            while (sizeContent < sizeTb)
            {
                textBox1.Font = new Font(textBox1.Font.FontFamily, textBox1.Font.SizeInPoints + 1);
                w = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Width;
                h = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Height;
                sizeContent = w * h;
            }
        }
        if (sizeContent >= sizeTb)
        {
            while (sizeContent >= sizeTb)
            {
                textBox1.Font = new Font(textBox1.Font.FontFamily, textBox1.Font.SizeInPoints - 1);
                w = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Width;
                h = TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Height;
                sizeContent = w * h;
            }
        }
    }
}