我在TreeView
的左侧有一个SplitContainer
,当我点击TreeNode时,我希望右侧的内容发生变化。我正在尝试做的是设置“窗口”,例如Putty中的窗口,即右侧的te内容可能非常复杂。
Putty http://unixwiz.net/images/putty-openssh-3.gif
我的想法是为每个树节点建立一个内容面板,将所有这些面板添加到右侧,并根据树视图上的点击显示/隐藏它们。
这是正确的做法吗?还有更好的吗?将树节点与其面板链接的最佳方法是什么,例如某种MVC?
谢谢
汤姆
答案 0 :(得分:3)
您可以让多个面板与各个设计人员接受上下文对象来填充或保存相关设置 然后在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;
}