我有一个带有几个文本框的 Winforms FlowLayoutPanel。文本框是否可以根据用户的输入动态更改其宽度,以便始终为每个文本框显示整个输入?
问问题
878 次
2 回答
2
您可以使用 TextBoxes 的 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
宽度只是一个软糖数字,用于说明填充和边框等的额外间距。
于 2013-09-03T14:00:38.030 回答
1
如果文本框变宽,则 FlowLayoutPanel 只需设置为 true
TextBox.MultiLine 为 true不要忘记检查文本框与布局面板相比的高度
于 2013-09-03T14:28:27.550 回答