簡體   English   中英

Treeview控制面板

[英]Treeview to control panels

我有一個項目,其用戶界面由兩個面板組成(左側和右側)。

在左側面板中是樹視圖。 根據所選節點的不同,右側面板中需要不同的“形式”。

到目前為止,我已經為右側面板定義了一組不同的“用戶控件”,我創建它們並根據從樹視圖中選擇的正確節點的要求顯示它們。

是否存在用於管理此類過程的“模式”,因為我的代碼(此處包含的時間太長)非常脆弱且根本無法擴展。 任何人都有任何建議,甚至知道一個開源項目,實現了同樣的事情。

這不一定很困難。 在左側停靠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);
        }
    }

就這樣。 如果用戶控件位於不同的命名空間或不同的程序集中,請調整上面的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM