Treeview控制面板

时间:2010-10-01 15:58:33

标签: c# winforms

我有一个项目,其用户界面由两个面板组成(左侧和右侧)。

在左侧面板中是树视图。根据所选节点的不同,右侧面板中需要不同的“形式”。

到目前为止,我已经为右侧面板定义了一组不同的“用户控件”,我创建它们并根据从树视图中选择的正确节点的要求显示它们。

是否存在用于管理此类过程的“模式”,因为我的代码(此处包含的时间太长)非常脆弱且根本无法扩展。任何人都有任何建议,甚至知道一个开源项目可以达到同样的目的。

1 个答案:

答案 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);
        }
    }

这就是全部。如果用户控件位于不同的命名空间或不同的程序集中,请调整上面的代码。