Подтвердить что ты не робот

Стыковка нескольких элементов управления - заполнение оставшегося пространства

Я пытаюсь установить N количество элементов управления в контейнере. Я хочу, чтобы все они заполнили всю ширину, но стек. Я хочу, чтобы один конкретный элемент управления (в настоящее время последний) заполнил оставшееся пространство, а все остальные имеют фиксированные размеры.

Это:

Button b1 = new Button() { Text = "Button 1", Dock = DockStyle.Top };
Button b2 = new Button() { Text = "Button 2", Dock = DockStyle.Top };
Button b3 = new Button() { Text = "Button 3", Dock = DockStyle.Fill };

Controls.Add(b1);
Controls.Add(b2);
Controls.Add(b3);

Производит следующее:

Button 3 filling entire parent

Как вы можете видеть, кнопка 3 делает именно то, что я сказал ей: Fill родительский. Но это не то, что я хочу. Помимо ручного размещения и обработки событий изменения размера и т.д., Как я могу заставить Button 3 заполнить оставшееся пространство?

Примечание. Я не использую конструктор.

4b9b3361

Ответ 1

При добавлении b3.BringToFront() (после того, как оно было добавлено в Controls), самое простое решение здесь - просто изменить порядок, в котором кнопки добавлены в Controls. Следующий код работает отлично:

Button b1 = new Button() { Text = "Button 1", Dock = DockStyle.Top };
Button b2 = new Button() { Text = "Button 2", Dock = DockStyle.Top };
Button b3 = new Button() { Text = "Button 3", Dock = DockStyle.Fill };

Controls.Add(b3);    // this guy first!
Controls.Add(b1);
Controls.Add(b2);

Результат:

enter image description here

Если вы внимательно посмотрите на границы в этом маленьком примере, это действительно работает лучше, чем BringToFront().

Ответ 2

В основном элемент управления DockStyle.Fill должен быть добавлен сначала в коллекцию Controls.

Ответ 3

Используйте Bring to Front на вашей кнопке 3 в дизайнере или вызовите этот код:

b3.BringToFront();

Ответ 4

кнопки 1 и 2 должны иметь свойство док-станции, установленное в верхнюю часть, и чтобы кнопка 3 оставила остальную часть пространства, вы можете установить ее свойство док-станции снизу.

dock = fill сделает кнопку заполнить все пространство, а не только оставшееся пространство. Bottom будет функционировать так же, как и верхний, но привязывая его к нижней части родительского контейнера. Примените кнопки в порядке 1, 2, 3.

Кроме того, вы можете установить свойство док-станции сверху на все три и просто кнопку размера три по-разному.