Порядок слоев компонентов WinForm UI - PullRequest
20 голосов
/ 29 августа 2009

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

Как изменить порядок слоев или порядок компонентов после добавления компонентов?

Ответы [ 4 ]

31 голосов
/ 29 августа 2009

Когда вы размещаете более одного элемента управления в одном и том же месте, один из них окажется сверху, а другой - снизу. Обычно это является результатом незначительной ошибки, например, неправильного использования функций привязки и закрепления для создать форму с изменяемым размером. В некоторых случаях, однако, вы можете захотеть перекрыть контроль для определенного эффекта.

Когда перекрытие элемента управления, это z-индекс, который определяет, какой элемент управления оказывается сверху. По сути, каждый элемент управления существует в своем отдельном пронумерованном слое. Элемент управления, имеющий уровень z-индекса 1, будет отображаться над элементом управления в z -индексировать слой 2, если они перекрываются. Обычно z-индекс группы элементов управления определяется порядком, в котором вы добавляете элементы управления, так что последний добавленный элемент управления всегда находится в верхнем слое (с индексом z из 0).

Однако вы можете изменить эти параметры.

Чтобы определить или установить z-индекс элемента управления, вы можете использовать методы GetChildIndex() и SetChildIndex() коллекции элементов управления. Вот пример, который перемещает элемент управления на третий уровень в z-индексе.

Controls.SetChildIndex(ctrl, 2);

Как правило, вам не нужен этот вид детализированного элемента управления. Вместо этого вам просто нужно поместить элемент управления в конец z-индекса (самый нижний слой) или перенести его на верхний уровень. .Вы можете выполнить эту функцию во время разработки, щелкнув правой кнопкой мыши элемент управления и выбрав «Привести в Fron» или «Отправить в Back». Вы также можете выполнить ту же задачу программным способом, используя методы Control.BringToFront() или Control.SendToBack().

ctrl.BringToFront(); // This is equivalent to Controls.SetChildIndex(ctrl,0);
28 голосов
/ 29 августа 2009

Это когда вы загружаете компоненты динамически в коде или в конструкторе? Если он находится в конструкторе, вы можете использовать команды Формат -> Порядок -> Отправить назад и Формат -> Порядок -> Привести на фронт . Отправить на и На фронт также доступны в контекстном меню при щелчке правой кнопкой мыши по элементу управления, а также на панели инструментов «Макет», которая должна автоматически отображаться при работе в конструкторе форм.

11 голосов
/ 29 августа 2009

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

5 голосов
/ 29 августа 2009

Вы пробовали играть с Z-Order ?

См. Также: Control.SentToBack метод - таким образом, большинство элементов управления Winform должны поддерживать это.

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