Детальный архитектурный вопрос TreeView - PullRequest
3 голосов
/ 19 мая 2011

У меня есть приложение для формы Windows, которое я разрабатываю, и мой клиент хочет, чтобы TreeView находился слева с узлами, которые при нажатии позволяют их пользователям работать с подробными экранами справа. Простейшим подходом было создание панелей, которые отключены до тех пор, пока не будет нажат соответствующий узел. Тем не менее, это приложение растет и слишком много живет в основной форме.

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

Кто-нибудь знает, как сделать что-то подобное?

Спасибо.

Ответы [ 4 ]

1 голос
/ 19 мая 2011

Вы должны попробовать использовать UserControl s.

По сути, каждая UserControl - это форма (более или менее), которую вы можете добавить в свою основную форму так же, как и любой другой элемент управления.

0 голосов
/ 19 мая 2011

Вы можете использовать разделенные элементы управления и загружать формы с правой стороны, но необходимо правильно их расположить.Как уже упоминалось @code, usercontrol лучше всего справляется с ними, поскольку их код написан отдельно.Просто вам нужно передать параметр (из выбора узла).

Возможно, вам потребуется несколько пользовательских элементов управления и поместить их в форму в соответствии с изменениями экрана.

0 голосов
/ 19 мая 2011

Я также недавно сталкивался с подобным случаем, и ниже то, что я сделал. Это работает довольно хорошо для моего случая.

  1. Добавлен разделенный контейнер, который делится по вертикали.
  2. Добавлен TreeView с Dock = Fill на левой панели разделенного контейнера.
  3. Добавлены элементы управления, которые должны были находиться на подробном экране на правой панели разделенного контейнера.
  4. При связывании данных с TreeView вы можете либо правильно назначить объект источника данных для тега TreeNode, либо получить подробную информацию о событии изменения выбранного узла. (Сохранение подробностей в свойстве Tag позволит быстро обновить представление подробностей, но оно компрометирует ... Зависит от размера данных).
  5. Изменение свойств правой панели в соответствии со свойствами выбранного узла дерева.

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

0 голосов
/ 19 мая 2011

Я бы унаследовал от Panel для каждой страницы, прикрепил бы экземпляр каждого производного от Panel объекта к свойству Tag каждого узла TreeView и отобразил бы это (Dock = Fill) при выборе узла.

...