Как я могу заставить дочерние элементы панели динамически сбрасывать свое свойство Location.Y?

У меня есть панель формы со свойством AutoScroll панели, установленным на True.

На этой панели я разместил несколько элементов управления GroupBox, которые занимают больше места, чем панель - таким образом, на панели появляется вертикальная полоса прокрутки.

При необходимости одна из панелей может изменять высоту во время выполнения (я программно устанавливаю ее высоту в зависимости от количества текста, который она содержит):

groupBox1.Height = label1.Height + label1.Top + 10;

Это нормально работает, если панель увеличивается в высоту - групповые поля под ней «перемещаются вниз». Однако, если панель уменьшается по высоте, расположенные ниже GroupBox не «перемещаются вверх».

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


person B. Clay Shannon    schedule 04.10.2012    source источник


Ответы (2)


Вместо этого замените Panel на FlowLayoutPanel, и это станет автоматическим.

(возможно, вы захотите отключить обертку FL-панели)

person Community    schedule 04.10.2012

Установите для их свойства стыковки значение Top. Затем измените Z-порядок дочерних элементов, чтобы указать порядок их отображения.

GroupBox1.Dock = DockStyle.Top;
GroupBox2.Dock = DockStyle.Top;
GroupBox3.Dock = DockStyle.Top;

Если groupbox1 увеличивается или уменьшается, другие 2 панели перемещаются для размещения.

person Bill Tarbell    schedule 04.10.2012
comment
Либо щелкнув элементы управления правой кнопкой мыши и выбрав «На передний план», «Отправить назад» и т. Д. Или вы можете просто зайти в файл designer.cs и просто настроить порядок, в котором они добавляются к их родительскому элементу. - person Bill Tarbell; 05.10.2012