[英]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.