Одинаковый Z-порядок для нескольких элементов управления в приложении C # Form - PullRequest
0 голосов
/ 02 августа 2010

Я работаю над приложением, которое имеет 3 различных типа пользовательских элементов управления - плоскости, соединители и элементы.Пользователь может добавлять их на холст, перемещать, удалять их и т. Д. Пока что все хорошо.Эти 3 типа управления ДОЛЖНЫ появляться в определенном порядке Z независимо от того, в каком порядке пользователь добавляет их на холст.Вот в чем проблема.

Плоскости ДОЛЖНЫ быть в самом нижнем положении, элементы ДОЛЖНЫ быть в самом верхнем положении, а соединители ДОЛЖНЫ быть между плоскостями и элементами.Это должно иметь место независимо от того, как пользователь добавляет их на холст, а также когда они загружаются из файла XML (который может быть создан путем сохранения их позиций и других свойств и т. Д.)

Мой вопрос -Каков наилучший метод для получения порядка Z, который я хочу?Могут ли несколько элементов управления иметь одинаковый Z-порядок (как упоминалось выше - все плоскости должны быть в самом нижнем порядке и т. Д.)

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Z-порядок определяется индексом элемента управления в родительском наборе элементов управления, поэтому для достижения желаемого эффекта вам придется соответствующим образом упорядочить элементы управления в родительском наборе элементов управления.

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

Вероятно, вам придется отслеживатьграницы для каждого типа элемента управления для индекса в родительском элементе управления и переупорядочить при добавлении элемента управления так, чтобы плоскости оставались в качестве самого низкого индекса и т. д.

0 голосов
/ 02 августа 2010

Form.Controls.SetChildIndex () помогает мне. Даже ControlAdded () может быть использован для установки дочернего индекса. Спасибо "Quintin Robinson" за это предложение.

Логика, которую я использовал для своих целей: Я сделал 3 разных (логических) группы индексов вкладок для всех пользовательских элементов управления, которые есть на холсте. При добавлении / удалении элемента управления я быстро переиндексирую все элементы управления, находящиеся на холсте. Таким образом, у меня всегда есть текущий линейный порядок индексов вкладок, так как они назначаются каждый раз, когда изменяется количество элементов управления на холсте.

В зависимости от моего требования о порядке Z для аналогичных типов контроля, я переиндексирую их. (например, все элементы индексируются от 0 до i-1, соединители индексируются от i до j-1, а плоскости индексируются от j до k-1; где i, j, k - количество элементов, соединителей и плоскостей соответственно.)

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