Winforms, создавая дополнение при использовании свойств Dock

Как я добавляю дополнение или некоторое пространство между текстовыми полями при использовании dockstyle.top свойства?

for(int i =0; i< 10; i++) {
    textboxes[i] = new TextBox();
    textboxes[i].Dock = DockStyle.Top;
    mypanel.Controls.Add(textboxes[i]); 
}

Код выше исправляет текстовые поля друг под другом. Не может понять это, не используя массовые панели или зафиксированное расположение. Как сделать следующее?

1) Я хотел бы добавить вокруг 10-20pixels между полями.

2) Как изменить размер (высота, ширина) текстовых полей, с тех пор при использовании dockstyle.top его игнорирует команды размера?

15
задан Milan 29 April 2010 в 13:15
поделиться

2 ответа

С DockStype.Top вы не можете изменить ширину текстовых полей, потому что они закреплены. Вы можете изменить только высоту. Но чтобы изменить высоту TextBox, вы должны заранее установить Multiline = true .

Чтобы получить пространство между различными полями, вы должны поместить каждое текстовое поле в панель, установите TextBox.Dock = Fill , Panel.Dock = Top и Panel.Padding = 10 . Теперь у вас есть пространство между каждым TextBox.

Пример кода

for (int i = 0; i < 10; i++)
{
    var panelTextBox = CreateBorderedTextBox();

    this.Controls.Add(panelTextBox);
}

private Panel CreateBorderedTextBox()
{
    var panel = CreatePanel();
    var textBox = CreateTextBox();

    panel.Controls.Add(textBox);
    return panel;
}

private Panel CreatePanel()
{
    var panel = new Panel();
    panel.Dock = DockStyle.Top;
    panel.Padding = new Padding(5);

    return panel;
}

private TextBox CreateTextBox()
{
    var textBox = new TextBox();
    textBox.Multiline = true;
    textBox.Dock = DockStyle.Fill;

    return textBox;
}

То, что я забыл, вы также можете попробовать FlowLayoutPanel . Просто удалите DockStyle.Top из панелей и поместите их в FlowLayoutPanel. Также вы должны установить FlowDirection на TopDown. Возможно, это тоже поможет вам решить вашу проблему.

19
ответ дан 1 December 2019 в 03:04
поделиться

Я знаю, откуда вы, это особенно расстраивает после возвращения к WinForms из WPF.

Я бы предложил использовать TableLayoutPanel , в котором каждый TextBox получит свою собственную ячейку, и настроить свойства ячеек. Это должно решить проблемы с заполнением и размером.

Другой альтернативой может быть использование более сложных элементов управления компоновкой, таких как DevExpress (не бесплатно).

2
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: