Стыковка нескольких элементов управления - заполнение оставшегося пространства
Я пытаюсь установить 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 заполнить оставшееся пространство?
Примечание. Я не использую конструктор.
Ответы
Ответ 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.
Кроме того, вы можете установить свойство док-станции сверху на все три и просто кнопку размера три по-разному.