C#实现Winform动态添加菜单的方法
本文实例讲述了C#实现Winform动态添加菜单的方法。分享给大家供大家参考。具体分析如下:
最近在做WINFORM开发,一直都在为主界面的点击事件及动态加载菜单苦脑。现在已解决这个问题了,可以实现数据库或都XML等配置完成动态生成菜单及事件加载。代码如下:
privatevoidForm1_Load(objectsender,EventArgse) { //添加菜单一 ToolStripMenuItemsubItem; subItem=AddContextMenu("入库",menuStrip1.Items,null); //添加子菜单 AddContextMenu("添加入库",subItem.DropDownItems,newEventHandler(MenuClicked)); AddContextMenu("入库管理",subItem.DropDownItems,newEventHandler(MenuClicked)); //添加菜单二 subItem=AddContextMenu("出库",menuStrip1.Items,null); //添加子菜单 AddContextMenu("添加出库",subItem.DropDownItems,newEventHandler(MenuClicked)); AddContextMenu("出库管理",subItem.DropDownItems,newEventHandler(MenuClicked)); } ///<summary> ///添加子菜单 ///</summary> ///<paramname="text">要显示的文字,如果为-则显示为分割线</param> ///<paramname="cms">要添加到的子菜单集合</param> ///<paramname="callback">点击时触发的事件</param> ///<returns>生成的子菜单,如果为分隔条则返回null</returns> ToolStripMenuItemAddContextMenu(stringtext,ToolStripItemCollectioncms,EventHandlercallback) { if(text=="-") { ToolStripSeparatortsp=newToolStripSeparator(); cms.Add(tsp); returnnull; } elseif(!string.IsNullOrEmpty(text)) { ToolStripMenuItemtsmi=newToolStripMenuItem(text); tsmi.Tag=text+"TAG"; if(callback!=null)tsmi.Click+=callback; cms.Add(tsmi); returntsmi; } returnnull; } voidMenuClicked(objectsender,EventArgse) { //以下主要是动态生成事件并打开窗体 //((senderasToolStripMenuItem).Tag)强制转换 ObjectHandlet=Activator.CreateInstance("WinForms","WinForms.Form2"); Formf=(Form)t.Unwrap(); f.ShowDialog(); }
希望本文所述对大家的C#程序设计有所帮助。