Winforms:FlowLayoutPanel中的动态TextBox宽度

时间:2013-09-03 11:54:33

标签: c# winforms textbox flowlayoutpanel

我有一个带有几个文本框的Winforms FlowLayoutPanel。文本框是否可以根据用户的输入动态地更改其宽度,以便始终为每个文本框显示整个输入?

2 个答案:

答案 0 :(得分:2)

您可以使用TextBox的TextChanged事件来测量文本并设置控件的宽度。我在此示例中添加了最小宽度32,以使其对最终用户可行:

public Form1() {
  InitializeComponent();

  textBox1.MinimumSize = new Size(32, 0);
  textBox2.MinimumSize = new Size(32, 0);
  textBox3.MinimumSize = new Size(32, 0);

  textBox1.TextChanged += textBox_TextChanged;
  textBox2.TextChanged += textBox_TextChanged;
  textBox3.TextChanged += textBox_TextChanged;
}

void textBox_TextChanged(object sender, EventArgs e) {
  TextBox tb = sender as TextBox;
  if (tb != null) {
    tb.Width = TextRenderer.MeasureText(tb.Text, tb.Font, Size.Empty, 
                            TextFormatFlags.TextBoxControl).Width + 8;
  }
}

明显的限制是TextBox的宽度不应该宽于FlowLayoutPanel的客户端宽度,因此您必须考虑到这一点。宽度的+ 8只是一个软糖数,用于说明填充和边框的额外间距等。

答案 1 :(得分:1)

如果文本框变宽,那么FlowLayoutPanel只设置为true

TextBox.MultiLine to true不要忘记检查文本框中的高度以及布局面板