在winforms中创建动态UI

时间:2011-10-14 09:45:21

标签: c# winforms user-interface user-controls controls

如果我想创建一个出现动态UI控件的winform,那么最好的方法是什么?

我有一个带有文本框的表单,右侧的按钮1,下面的列表框以及列表框下方的按钮2。按下按钮1应该在第一个文本框下面生成另一个文本框,并且列表框/按钮2应该向下移动。如果以前有人使用过Adobe Bridge,那么批量重命名窗口就是我所说的一个例子。

我在考虑简单地将textboxN.Height添加到this.Size,然后textboxN.Height添加到每个控件(第一个文本框除外)Y位置,以便它们全部向下移动{{1 }} 像素。但我认为有更好的方法可以做到这一点。相反,Winforms是否适合这样的事情?

1 个答案:

答案 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人,但这仍然是合法的。

编辑逻辑错误