Создание динамического интерфейса в winforms - PullRequest
4 голосов
/ 14 октября 2011

Если я хочу создать winform с отображением динамических элементов управления пользовательского интерфейса, каков наилучший способ сделать это?

У меня есть форма с текстовым полем, кнопка 1 справа от нее, под списком внизу,и кнопка2 под списком.Нажатие кнопки 1 должно создать другое текстовое поле под первым текстовым полем, а список / кнопка 2 должна быть смещена вниз.Если кто-то ранее использовал Adobe Bridge, окно пакетного переименования является примером того, о чем я говорю.

Я думал просто добавить textboxN.Height к this.Size, а затем textboxN.Height к каждому изэлементы управления (кроме первого текстового поля) Y, поэтому все они сдвигаются вниз на textboxN.Height пикселей.Но я думаю, что есть лучший способ сделать это.Скорее, Winforms подходит для чего-то подобного?

1 Ответ

3 голосов
/ 14 октября 2011

Вы можете просто добавить высоту TextBox к размеру формы, но было бы лучше использовать константу, которая определяет размер TextBox, а затем добавить это.

Для перемещения listBox / button2 прикрепите их к нижней части формы, и они автоматически останутся на том же расстоянии от нижней части формы.

Что касается динамической генерации, используйте Список (или Стек, в зависимости от того, что именно вы с ним делаете).

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, но это все еще законно.

Отредактировано для логических ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...