Стыковка нескольких элементов управления - один заполняет оставшееся пространство - PullRequest
21 голосов
/ 13 октября 2011

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

This:

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 родитель.Но это не то, что я хочу сделать.Помимо размещения вручную и обработки событий изменения размера и т. Д., Как заставить кнопку 3 заполнить оставшееся пространство?

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

Ответы [ 4 ]

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

Хотя добавление 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().

6 голосов
/ 24 октября 2013

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

5 голосов
/ 13 октября 2011

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

b3.BringToFront();
0 голосов
/ 28 сентября 2016
Кнопки

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

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

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

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