传递类型为参数的方法

今天在写程序时发现要实现一个功能,就是需要一个树,然后当双击树的节点时弹出一个窗口。

这个看起来很简单,但是每个节点对应的窗口都不一样,如果窗口很多的话,需要写的代码就比较多。

后来想了一下,觉得可以把窗口相关的参数放到节点的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

传递类型为参数的方法相关推荐

  1. 调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...

    之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了.所以,现 ...

  2. PowerBuilder窗口之间传递多参数的方法

    PowerBuilder窗口之间传递多参数的方法 http://www.21tx.com 2002年05月12日 Blog oceanaut 在PowerBuilder中函数OpenWithParm, ...

  3. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  4. c语言参数string类型,C语言main方法的参数打印

    c语言指针数组.字符串 有写错的地方,请帮忙纠错,感谢~ main方法的第二个参数是指针数组,存储的都是指针,所以每个元素的地址都是char **类型 字符串打印的时候,会自动截止到0字符 数组的名字 ...

  5. ajax传递多参数类型,Ajax传递不同类型的参数

    1.目录结构: 1.传递普通的参数 2.传递对象 3.传递List 4.传递数组 1.1 前端页面 前端页面.png 1.2 HTML代码 注意:需要引入layui噢 button{ margin-t ...

  6. python中redirect如何传值_flask的重定向(redirect)传递参数的方法

    flask中的重定向redirect方法常常被用来跳转页面,那redirect在跳转页面的同时能不能传递我们下一个页面需要的参数呢? 带着这个问题我看了redirect()的源码,如下: 1 def ...

  7. python 反向传值_Django中reverse反转并且传递参数的方法

    在写项目的过程中,有些函数不可避免的需要传入参数进去,所以我们在使用reverse进行反转时也需要传递参数.这个时候我们就可以使用 'reverse()' 中的 kwargs 参数了,它将传入一个字典 ...

  8. php中参数传值的三种方法,php cli传递参数的方法

    php cli传递参数的方法 $options = "f:g:"; $opts = getopt( $options ); print_r($opts); 在命令行下运行 /usr ...

  9. url 特殊字符 传递参数解决方法

    url 特殊字符 传递参数解决方法 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符号及编码. 十六进制值  1. + UR ...

最新文章

  1. ALV的SAP自带标准程序实例
  2. html5跨域 postmessage,html5跨域通讯之postMessage的用法总结
  3. linux怎么查端口是否被占用,LINUX中如何查看某个端口是否被占用
  4. c语言斐波那契数列_视频丨神奇的斐波那契数列科学性与艺术性
  5. linux中改变文件大小,Linux 改变文件大小的方法
  6. tensorflow入门_TensorFlow法律和统计入门
  7. 安卓页面去掉顶部标题
  8. 书摘 - 吴军.浪潮之巅
  9. 局域网 —— VLAN
  10. iconfont图标
  11. 磁盘阵列数据恢复_raid5硬盘离线数据恢复步骤_HP-lefthand存储详解
  12. 子母钟运用在什么领域,设备如何调试,天穹告诉你子母钟系统授时的意义
  13. Layim 自定义聊天界面
  14. jzoj 4638. 第三条跑道
  15. 无人机技术的发展与应用
  16. 第1-2课:算法设计常用思想之贪婪法
  17. 大学生web前端期末大作业实例代码 (1500套,建议收藏) HTML+CSS+JS
  18. 3种方法设置PDF“打开密码”,总有一种适合你
  19. dell服务器 指示灯_dell服务器的指示灯闪烁怎么解决?
  20. html和xhtml基础知识整理

热门文章

  1. 5张图搞懂Java深浅拷贝
  2. linux下gdb使用core文件调试程序,解决“段错误核心已转储“的问题
  3. 循环队列的顺序存储和实现(C语言)【循环队列】
  4. 第八届蓝桥杯决赛 磁砖样式(枚举)
  5. 磨砂串口服务器型号,MOXA串口服务器 NPort 5630-16,RS-422/485
  6. css 图片换行_前端学习口诀VI:html+css口诀结尾篇,值得收藏!
  7. java的引用传递_Java的值传递和引用传递
  8. qvector 结构体排序_C++结构体的应用_YCOJ
  9. 新生代农民工必看:模拟器eNSP安装教程(附下载链接)
  10. OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?