不增加字体大小的情况下增加文本框高度

4
我在我的应用程序中有一个UserControl,并在其上安装了一个具有属性Docking.Fill的TextBox。
我遇到这样一种情况:当我动态增加窗口/表单的大小时,所有的控件都会按照新的比例进行重新调整大小,但是我的文本框的高度不会改变。
解决方案1: 我必须设置字体大小以增加高度,但问题是,它会重新调整我应用程序中使用的所有控件的大小,一些控件中的文本会重叠。
我希望有其他方法,可以在不使用Multiline = True的情况下增加我的文本框高度。
如果有人能提供帮助,那就太好了。

大小由UserControl确定。您在表单中对其进行的任何操作都没有记录。将单行TextBox.Dock属性设置为Fill是完全错误的,TextBox失去了自适应字体大小的能力。这几乎肯定是在您从UserControl而不是TextBox派生类时出错了。 - Hans Passant
1
一个UserControl,上面有一个TextBox和一个Label,当TextBox长度为0时,Label显示阴影。我有一个函数可以找到UserControl或Form中的所有控件,并将它们添加到Control列表中,然后在Form / UserControl的Load_event中按给定的纵横比重新调整每个控件的大小,没错吧?问题是,尽管我的TextBox的Docking被设置为Filled,但通过操作其Height * Factor来改变大小时,它并没有重新调整大小。这就是我提出问题的原因。现在我只需使用TextBoxControl.AutoResize = false,然后再使用Size属性即可实现。这正是我想要的。 - DareDevil
2个回答

4
您可以在设计器文件中完成此操作。
this.textBox1.AutoSize = false;
this.textBox1.Size = new System.Drawing.Size(100, 20);

MSDN > TextBoxBase.AutoSize Property


我必须在运行时更改此大小,如我所提到的,控件的动态调整大小。 - DareDevil
是的,在 AutoSize = false; 部分,但您可能希望使用 DockStyle 或其他方式进行大小调整。 - H H
@DareDevil - 这段代码非常注重运行时。 - H H
@Pranay Rana:没错,我已经测试过了,很好。但是我还测试了另一种方法,即增加字体大小和高度,代码来自“Code Project”。 - DareDevil

2

一个自定义函数,可以按比例重新调整字体大小,并增加文本框的高度。

public void IncerseHeightTextBox(TextBox tb, float Aspect_Ratio_Height)
    {
        tb.AutoSize = false;
        tb.Width = (int)(tb.Width * (1.402+1.171)/2); //Width+height Ratio /2
        tb.Font = new Font(tb.Font.FontFamily, tb.Font.Size * Aspect_Ratio_Height);
        tb.Size = new Size(tb.Width, (int)(tb.Height * Aspect_Ratio_Height));
    }

这里是函数调用:

IncerseHeightTextBox(tb2, (float)1.171);

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