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

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

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

![форма](https://i.stack.imgur.com/bVRJB.png)

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

 

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

```
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();

```
 

Грег Hurlman писал:

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

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

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

 

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

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

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

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