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#程序设计有所帮助。