WinForm动态菜单产生疑惑事件起因:
WinForm入门学习时,利用设计器制作菜单,在以后的快速原型测试中,也用这种方式。但项目实际开发的时候,都是希望用代码生成WinForm动态菜单。我们可以用数据库,XML来平行地存储菜单项,也可以用XML来层次地形象的存储菜单。
虽然XML的层次结构,与菜单结构像极了,几乎是“同构”的。但WinForm中的MenuStrip,并不支持数据绑定。
感叹:在算法设计和业务操作的时候,我们希望面向对象的严格,但在组合算法,集成业务,粘合界面的时候,我们需要"宏","marco","#define"动态特性,如javascript, foxpro中那样的灵活。
问题:
1. WinForm中,为什么就不能支持菜单的数据绑定和序列化?相比之下,Asp.Net快速开发中,数据绑定要支持的好得多,多不公平。
2. c#2太静态了,以至于把菜单和事件联系起来,太难了。有的用反射;有的对字符串进行判断,大量使用switch(menuStripItem.Text) case...无可奈何的重复。希望C#能动态些,再动态些。
3. vs2010中,能动态添加字符串 表示的类和方法么,实现如下需求么?
我们希望在数据库中有如下变量表:
变量类型 | 变量名称 |
List<int> | list |
变量名称 | 执行方法 | 参数类型列表 | 参数值列表 |
list | Add | int | 5 |
list | Add | int | 8 |
根据 数据库,我们怎么把如字符串变成语句
"List<int> list = new List<int>;
list.Add(5);
list.Add(8);"
解答:对于不支持数据绑定,你可以自己写一个方法,用DATATABLE存储你的菜单结构,在菜单加载时你可以用XML化的DATATABLE进行加载,或者直接用DATATABLE进行加载。对于作者提出的第二个观点,我觉得是作者对菜单的事件绑定不太熟悉所导致的,至于用switch case结构,是作者自己的设计问题,用工厂模式就可以解决。
【编辑推荐】