如果我想创建一个出现动态UI控件的winform,那么最好的方法是什么?
我有一个带有文本框的表单,右侧的按钮1,下面的列表框以及列表框下方的按钮2。按下按钮1应该在第一个文本框下面生成另一个文本框,并且列表框/按钮2应该向下移动。如果以前有人使用过Adobe Bridge,那么批量重命名窗口就是我所说的一个例子。
我在考虑简单地将textboxN.Height
添加到this.Size
,然后textboxN.Height
添加到每个控件(第一个文本框除外)Y位置,以便它们全部向下移动{{1 }} 像素。但我认为有更好的方法可以做到这一点。相反,Winforms是否适合这样的事情?
答案 0 :(得分:3)
你可以 - 只需将TextBox的高度添加到表单的大小,但是最好使用一个指示TextBoxes大小的常量,然后添加它。
要移动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人,但这仍然是合法的。
编辑逻辑错误