我有一个项目,其用户界面由两个面板组成(左侧和右侧)。
在左侧面板中是树视图。根据所选节点的不同,右侧面板中需要不同的“形式”。
到目前为止,我已经为右侧面板定义了一组不同的“用户控件”,我创建它们并根据从树视图中选择的正确节点的要求显示它们。
是否存在用于管理此类过程的“模式”,因为我的代码(此处包含的时间太长)非常脆弱且根本无法扩展。任何人都有任何建议,甚至知道一个开源项目可以达到同样的目的。
答案 0 :(得分:5)
这不一定很困难。在左侧停靠TreeView,添加一个面板并将其Dock设置为Fill。然后使用这样的代码来选择用户控件:
private UserControl currentView;
public void SelectView(UserControl ctl) {
if (currentView != null) {
panel1.Controls.Remove(currentView);
currentView.Dispose();
}
if (ctl != null) {
ctl.Dock = DockStyle.Fill;
panel1.Controls.Add(ctl);
}
currentView = ctl;
}
您可以通过使用反射来了解TreeView。在设计器中,将节点的Name属性设置为用户控件的名称(如“UserControl1”)。并实现类似于此的BeforeSelect事件:
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) {
string name = e.Node.Name;
name = this.GetType().Namespace + "." + name;
Type ctlType = System.Reflection.Assembly.GetExecutingAssembly().GetType(name);
if (ctlType == null) e.Cancel = true;
else {
var ctor = ctlType.GetConstructor(new Type[] { });
var ctl = ctor.Invoke(null) as UserControl;
SelectView(ctl);
}
}
这就是全部。如果用户控件位于不同的命名空间或不同的程序集中,请调整上面的代码。