Как создать тип диалога древовидного предпочтения интерфейса в C #?

голоса
13

Я пишу приложение, которое в основном только диалог настроек, так же, как древовидный предпочтениям диалог, который сам по себе Visual Studio использует. Функция приложения просто сквозной данные из последовательного устройства в файл. Он выполняет много, много преобразований на данных перед записью в файл, поэтому графический интерфейс для приложения просто все настройки, которые диктуют, что эти преобразования должны быть.

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

форма

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

Задан 06/08/2008 в 18:22
источник пользователем
На других языках...                            


3 ответов

голоса
10

Опрятнее способ создавать отдельные формы для каждой «панели», и в каждом виде конструктора, установите

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

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

Возможно , основная форма могла бы использовать SplitContainerсо статическим TreeViewв одной панели, и пространством , чтобы добавить эти формы в другую. После того, как они будут добавлены, они могут быть перевернуты путем использования Hide/Showили BringToFront/SendToBackметодов.

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
Ответил 06/08/2008 в 19:02
источник пользователем

голоса
2

Грег Hurlman писал:

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

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

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

Ответил 06/08/2008 в 19:20
источник пользователем

голоса
0

Я бы, вероятно, создать несколько классов панели на основе базового класса наследуемых CustomControl. Эти элементы будут затем методы, как Save / Load и тому подобное. Если это так, я могу спроектировать каждый из этих панелей отдельно.

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

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

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

Ответил 14/08/2008 в 16:13
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more