【问题标题】:Winforms: Dynamic TextBox width in FlowLayoutPanelWinforms:FlowLayoutPanel 中的动态文本框宽度
【发布时间】:2013-09-03 11:54:33
【问题描述】:

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

【问题讨论】:

    标签: c# winforms textbox flowlayoutpanel


    【解决方案1】:

    您可以使用 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 只是一个软糖数字,用于说明填充和边框等的额外间距。

    【讨论】:

      【解决方案2】:

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

      TextBox.MultiLine to true 不要忘记检查文本框与布局面板的高度对比

      【讨论】:

        猜你喜欢
        • 2013-08-01
        • 2012-07-11
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        相关资源
        最近更新 更多