c# Использование элемента управления TreeView в SplitContainer для изменения содержимого

У меня есть TreeView слева от SplitContainer, и я хотел бы, чтобы содержимое справа менялось, когда я нажимаю на TreeNode. То, что я пытаюсь сделать, это окно настроек, такое как в Putty, т.е. содержимое правой стороны может быть довольно сложным.

Putty
(источник: unixwiz.net)

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

Это правильный подход? Есть ли лучший? Как лучше всего связать узлы дерева с их панелями, например, какой-нибудь MVC?

Спасибо

Том


person scibuff    schedule 18.02.2012    source источник
comment
Сообщение в моем блоге, Реализация диалогового окна параметров страницыМожет подскажет. Исходный код находится на github.   -  person Roger Lipscombe    schedule 18.02.2012
comment
Безусловно, самый простой способ реализовать это в Winforms — с помощью TabControl без вкладок: stackoverflow.com/questions/2340566/   -  person Hans Passant    schedule 18.02.2012


Ответы (1)


У вас может быть несколько панелей с отдельными дизайнерами, которые принимают объект контекста для заполнения или сохранения связанных настроек. Затем в вашем TreeView вы можете использовать свойство Tag каждого узла, чтобы поддерживать связанную панель, и когда он выбран, показать панель на правой панели.

Вот код:

interface ISettingPanel
{
SettingContext Context{get;set;}
}

public BasicSettingPanel:Panel,ISettingPanel
{
....
}

public void InitTreeView
{
var node=new TreeNode();
node.Tage=new BasicSettingPanel();// or you can set the type to create the panel later
treeView.Nodes.Add(node);
}

public void AfterNodeSelected()
{
_currentPanel=null;
var selectedNode=treeView.SelectedNode;
var panel=selectedNode.Tag as Panel;
if(panel!=null)
_currentPanel=panel;
(_currentPanel as ISettingPanel).Context=this.Context;
}
person Beatles1692    schedule 18.02.2012