根据文本长度调整文本框和窗体大小

4
如何根据文本长度自动调整TextBox和Windows Form的大小?

使用Autosize属性 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.textboxbase.autosize.aspx - Jodrell
@Jodrell 这并不会改变 TextBox 的宽度,只会改变高度。 - Connell
4个回答

10

你可以尝试覆盖 OnTextChanged 事件,然后根据文本的大小更改Width

protected override OnTextChanged(EventArgs e)
{
    using (Graphics g = CreateGraphics())
    {
        SizeF size = g.MeasureString(Text, Font);
        Width = (int)Math.Ceiling(size.Width);
    }
    base.OnTextChanged(e);
}

我从未在TextBox的TextChanged事件上尝试过它;) 但是当我根据内部Label的文本调整UserControl的大小时,它对我有效。 - Connell
我一直遵循我提出的上述答案,从未使用Override。 - Sandy
@rapsalands,如果不覆盖,所有的 OnTextChanged(EventArgs e) 只是触发事件。它们做的事情完全相同,所以它仍然可以工作。 - Connell
不要误会,我知道它仍然有效,我只是说我从未使用过覆盖技术。我在这个领域有点新,需要学习和探索很多。我喜欢你的技巧,所以把这个问题加入了我的收藏夹,这样我可以随时参考它。谢谢。 - Sandy
@rapsalands 它确实有其好处 :) 是一个很好的学习领域。干杯! - Connell

2

试一下这个,它也可以工作...

在这里,我将文本框的最小宽度设置为100。"txt"是TextBox。

const int width = 100;

private void textBox1_TextChanged(object sender, EventArgs e)
{
    Font font = new Font(txt.Font.Name, txt.Font.Size);

    Size s = TextRenderer.MeasureText(txt.Text, font);
    if (s.Width > width)
    {
        txt.Width = s.Width;
    }
}

希望这有所帮助。

1

这里有一个更好的解决方案。 场景是:我有一个文本框,填充在表单(用户控件)中。因此,每次文本框中的行数发生变化时,我希望改变表单的高度,但其高度不低于MinHeight(一个常量)。

private void ExtendFormHeight()
        {
            int heightChanged = txtText.PreferredSize.Height - txtText.ClientSize.Height;
            if (Height + heightChanged > MinHeight)
            {
                Height += heightChanged;
            }
            else
            {
                Height = MinHeight;
            }
        }

希望这能帮到你!

你有没有想过如何处理文本块?我正在从我的代码中传递一个字符串。 - Zarif Rahman

-2

在属性中将宽度设置为自动


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接