C# Winforms:FlowLayoutPanel中的动态文本框宽度

C# Winforms:FlowLayoutPanel中的动态文本框宽度,c#,winforms,textbox,flowlayoutpanel,C#,Winforms,Textbox,Flowlayoutpanel,我有一个Winforms FlowLayoutPanel和几个文本框。文本框是否可以根据用户的输入动态更改其宽度,以便始终为每个文本框显示整个输入?您可以使用文本框的TextChanged事件来测量文本并设置控件的宽度。在本例中,我添加了最小宽度32,以使其对最终用户实用: public Form1() { InitializeComponent(); textBox1.MinimumSize = new Size(32, 0); textBox2.MinimumSize = ne

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

您可以使用文本框的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;
  }
}

有一个明显的限制,即文本框的宽度不应大于FlowLayoutPanel的客户端宽度,因此您必须对此进行说明。宽度的
+8
只是一个模糊的数字,用于说明填充和边框等的额外间距。

您可以使用文本框的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;
  }
}

有一个明显的限制,即文本框的宽度不应大于FlowLayoutPanel的客户端宽度,因此您必须对此进行说明。宽度的
+8
只是一个模糊的数字,用于说明填充和边框等的额外间距。

如果文本框变宽,则FlowLayoutPanel刚刚设置为true


如果文本框变得比FlowLayoutPanel更宽,则不要忘记检查文本框与layoutpanel之间的高度

不要忘记检查文本框与布局面板之间的高度