日期:2014-05-18  浏览次数:20858 次

动态菜单除了用反射就只能用CASE了吗?大家有什么好的经验
动态菜单除了用反射就只能用CASE了吗?大家有什么好的经验
  switch (Module)
  {
  case "Main": 
  ...
  break;

难道除了反射,就只能像上面一样?

------解决方案--------------------
为每个菜单单独添加点击事件即可,既然菜单可以动态生成,点击事件也可以,这样处理,点击效率极高,生成菜单速度慢了点但是一次性而已。
------解决方案--------------------
探讨
引用:
难道你不知道委托是什么么?

委托可以使得你像使用一个数据类型那样使用一个方法。


菜单列表是通过数据库存储的,已经可以动态自动生成列表
现在可以用一个事件得到 点击菜单 的菜单名,是一个字符串,但是这个字符串可以就是需要访问的FORM的实例名称
现在问的是除了 用反射外,还有什么方法?

------解决方案--------------------
既然是动态添加,必然你希望在程序编译之后还能添加功能。这些编译的时候都不存在的东西,无论用什么方法,都只能反射。如果你编译之后不需要再添加新功能了。你可以硬编码所有可能用到的模块集合,在配置文件里面判断取舍。另外反射也没有什么不好,不要担心。
------解决方案--------------------
如果你有一个很小的函数,频繁需要反射调用,的确性能有些影响。
但是对于插件程序,这种损耗可以忽略不计。