2013-09-03 6 views
0

У меня есть Winflows FlowLayoutPanel с несколькими текстовыми полями. Возможно ли, что текстовые поля могут динамически изменять свою ширину в зависимости от ввода пользователя, так что весь вход всегда отображается для каждого текстового поля?Winforms: Dynamic TextBox width в FlowLayoutPanel

ответ

2

Вы можете использовать событие TextChanged для ваших TextBoxes для измерения текста и установки ширины элемента управления. Я добавил минимальную ширину 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

в случае текстовое поле прибудет-х шире, чем в FlowLayoutPanel просто установлено в истинно,

TextBox.MultiLine to true не забудьте проверить высоту из текстовых полей по сравнению с макетом, а также