Изменить макет стыковки в WinForms

В моей форме есть SplitContainer, для свойства Dock которого задано значение Fill. Он содержит несколько дочерних элементов управления, многие из которых имеют прикрепленные к ним обработчики событий. Позже я решил поставить StatusStrip внизу формы. Угадайте, что я не могу установить StatusStrip для закрепления в нижней части моей формы. SplitContainer продолжит заполнять всю форму. Несмотря на то, что StatusStrip, по-видимому, пристыковывается к днищу, на самом деле он скрывает за собой нижнюю часть SplitContainer.

Единственное, что можно сделать, это ВЫРЕЗАТЬ SplitContainer, а затем ВСТАВИТЬ его обратно. Вырезание SplitContainer делает StatusStrip единственным элементом управления в моей форме и, таким образом, позволяет ему захватывать нижнюю стыковку. После этого вставка SplitContainer позволяет заполнить оставшуюся область. Короче говоря, стыковка использует метод «первым пришел, первым обслужен».

Теперь, когда к моим элементам управления привязано множество обработчиков событий, вырезание и вставка становятся для меня кошмаром. Наличие моего проекта на C# означает, что мне нужно вручную прикрепить все эти обработчики событий.

Есть ли лучшая работа вокруг?


person dotNET    schedule 10.07.2013    source источник


Ответы (1)


Это проблема z-порядка между разделителем и полосой состояния. Когда у вас есть элемент управления, который вы хотите закрепить, и один или несколько элементов управления, которые вы хотите закрепить сверху, слева, справа или снизу, вы должны сделать так, чтобы элемент управления заливкой был первым в z-порядке.

Лучше всего открыть инструмент Document Outline, выбрать SplitContainer и с помощью кнопок вверх или вниз изменить его z-порядок.

Я должен добавить, что в Winforms z-порядок определяется порядком, в котором вы добавляете элементы управления в коллекцию Controls. Этот порядок определяет порядок создания связанных системных элементов управления, следовательно, их z-порядок. Использование инструмента Document Outline для изменения z-порядка просто приводит к изменению порядка сгенерированного кода.

person Tergiver    schedule 10.07.2013
comment
Именно то, что мне было нужно. Огромное спасибо. - person dotNET; 11.07.2013