在winforms中创建动态UI
本文关键字:动态 UI 创建 winforms | 更新日期: 2023-09-27 18:11:18
如果我想创建一个显示动态UI控件的winform,最好的方法是什么?
我有一个带有文本框的表单,右侧是一个button1,下面是一个列表框,列表框下面是一个button2。按下button1应该在第一个文本框下面生成另一个文本框,listbox/button2应该向下移动。如果有人以前使用过Adobe Bridge,批量重命名窗口就是我所说的一个例子。
我正在考虑简单地将textboxN.Height
添加到this.Size
,然后将textboxN.Height
添加到每个控件(除了第一个文本框)Y位置,因此它们都被textboxN.Height
像素向下移动。但我觉得有更好的办法。更确切地说,Winforms适合这样的东西吗?
您可以将TextBox的高度添加到表单的大小,但是最好使用一个常量来指示TextBox的大小,然后添加它。
要移动listBox/button2,将它们锚定在表单的底部,它们将自动与表单底部保持相同的距离。
至于动态生成,使用List(或Stack,取决于你要用它做什么)。
partial class Form1 : Form
{
List<TextBox> textBoxes = new List<TextBox>(); // or stack
const int textBoxWidth = 200; // control variables for TextBox placement
const int textBoxHeight = 50;
const int textBoxMargin = 5;
void button1_Click(object sender, EventArgs e)
{
this.Height += textBoxHeight + textBoxMargin;
TextBox tb = new TextBox();
if (textBoxes.Count == 0)
{
tb.Top = textBoxMargin;
}
else
{
tb.Top = ((textBoxHeight + textBoxMargin) * textBoxes.Count) + textBoxMargin;
}
tb.Left = textBoxMargin;
tb.Height = textBoxHeight;
tb.Width = textBoxWidth;
textBoxes.Add(tb);
this.Controls.Add(tb);
}
}
应该可以。这里的方法是,几乎所有的位置定制都可以用常量值来完成。
最好在WinForms中做吗?当然,在WinForms中没有理由不这样做,这个功能很容易实现。我自己是WPF的人,但这仍然是合法的。
编辑逻辑错误