c # Использование элемента управления TreeView в SplitContainer для изменения содержимого - PullRequest
2 голосов
/ 18 февраля 2012

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

Шпаклевка http://unixwiz.net/images/putty-openssh-3.gif

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

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

спасибо

Tom

1 Ответ

3 голосов
/ 18 февраля 2012

У вас может быть несколько панелей с отдельными дизайнерами, которые принимают объект контекста для заполнения или сохранения связанных параметров. Затем в 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;
}
...