传递类型为参数的方法
傳遞類型為參數的方法
?
今天在寫程序時發現要實現一個功能,就是需要一個樹,然后當雙擊樹的節點時彈出一個窗口。
這個看起來很簡單,但是每個節點對應的窗口都不一樣,如果窗口很多的話,需要寫的代碼就比較多。
后來想了一下,覺得可以把窗口相關的參數放到節點的tag屬性中。最先想到的是放窗體類的名稱,不過還要使用反射什么的,我不太喜歡,而且一不小心就寫錯類名了;類似的還有使用switch開關語句,在雙擊的時候根據類名或者其他枚舉的方法判斷打開的窗口,不過也比較麻煩;再然后就想能不能用委托實現,但是想了一下如果用委托的話還是需要把每個打開窗口的方法都寫出來,也需要寫很多代碼。因為我比較胖,人也比較懶,對這些方法都不滿意,最后就想能不能在tag里直接存在窗體類型呢?然后直接實例化該類型,得到窗口對象,直接打開就完了,經過一試果然可以:
?
?
?1? /// <summary>
?2???????? /// 主窗體加載事件,把需要打開的報表窗體都加進來
?3???????? /// </summary>
?4???????? /// <param name="sender"></param>
?5???????? /// <param name="e"></param>
?6???????? private void FrmMainLoad(object sender, EventArgs e)
?7???????? {
?8???????????? TreeNode root = new TreeNode("報表演示");
?9???????????? tvMain.Nodes.Add(root);
10
11???????????? TreeNode newNode = new TreeNode("表格報表");
12???????????? newNode.Tag = typeof(FrmTableReport);
13???????????? root.Nodes.Add(newNode);
14
15???????????? newNode = new TreeNode("分組報表");
16???????????? newNode.Tag = typeof(FrmGroupReport);
17???????????? root.Nodes.Add(newNode);
18????????????
19???????? }
20
21???????? /// <summary>
22???????? /// 雙擊樹節點事件
23???????? /// </summary>
24???????? /// <param name="sender"></param>
25???????? /// <param name="e"></param>
26???????? private void TvMainNodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
27???????? {
28???????????? if (e.Node != null && e.Node.Tag != null)
29???????????? {
30???????????????? ShowTaleReport(e.Node.Tag as Type);
31???????????? }
32???????? }
33
34???????? /// <summary>
35???????? /// 打開類型指定的窗體
36???????? /// </summary>
37???????? /// <param name="type"></param>
38???????? private void ShowTaleReport(Type type)
39???????? {
40???????????? Form report = type.GetConstructor(System.Type.EmptyTypes).Invoke(new object[0]) as Form;
41???????????? if (report == null) return;
42???????????? report.MdiParent = this;
43???????????? report.WindowState = FormWindowState.Maximized;
44???????????? report.Show();
45???????? }
通過這種方式,我每增加一個需要管理的報表窗體,只需要在formlaod事件里加上三行代碼就完了。
呵呵,夠簡單了。
?
?
http://www.cnblogs.com/taxhaven/articles/1725169.html
總結
以上是生活随笔為你收集整理的传递类型为参数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sharpdevelop学习
- 下一篇: .Net遍历窗口