在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适合这样的东西吗?

在winforms中创建动态UI

您可以将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的人,但这仍然是合法的。

编辑逻辑错误