動態創建菜單使得程序靈活性大大增加,本文根據讀取xml文件中的配置菜單項來動態創建菜單,代碼如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using WinformMenu.Helper; using System.Xml; namespace WinformMenu { public partial class FrmAddMenu : Form { public FrmAddMenu() { InitializeComponent(); } private void FrmAddMenu_Load(object sender, EventArgs e) { MenuStrip menuS = new MenuStrip(); menuS.Parent = this; string xmlFileName = @"F:\c#工程\WinformMenu\WinformMenu\XML\菜單.xml"; createMenu(xmlFileName, menuS); } public void createMenu(string xmlFileName, MenuStrip menuS) { //1:根據XmlElement創建菜單 //XmlNode node = xmlHelper.GetXmlNode(xmlFileName, "//MangeTvMenu"); //foreach (XmlNode xml in node.ChildNodes) //{ // ToolStripMenuItem mainMenu=new ToolStripMenuItem(); // mainMenu.Text = xml.Attributes["descript"].Value; // menuS.Items.Add(mainMenu); // if (xml.HasChildNodes) // { // CreateSubMenuByNode(xml, mainMenu); // } //} //2:根據XmlNode創建菜單 XmlElement xml = xmlHelper.GetXmlElement(xmlFileName); foreach (XmlElement xel in xml.ChildNodes) { ToolStripMenuItem mainMenu = new ToolStripMenuItem(); mainMenu.Text = xel.Attributes["descript"].Value; menuS.Items.Add(mainMenu); if (xml.HasChildNodes) { CreateSubMenuByElement(xel, mainMenu); } } } /// <summary> /// 根據node節點遞歸創建菜單 /// </summary> /// <param name="xNode"></param> /// <param name="menuItem"></param> public void CreateSubMenuByNode(XmlNode xNode, ToolStripMenuItem menuItem) { foreach (XmlNode xml in xNode.ChildNodes) { ToolStripMenuItem subMenu = new ToolStripMenuItem(); if (xml.ChildNodes.Count > 1) { subMenu.Text = xml.Attributes["descript"].Value; menuItem.DropDown.Items.Add(subMenu); CreateSubMenuByNode(xml, subMenu); } else { subMenu.Text = xml.InnerText; menuItem.DropDown.Items.Add(subMenu); } } } /// <summary> /// 根據元素節點遞歸創建菜單 /// </summary> /// <param name="xml"></param> /// <param name="menuItem"></param> public void CreateSubMenuByElement(XmlElement xml, ToolStripMenuItem menuItem) { foreach (XmlElement xel in xml.ChildNodes) { ToolStripMenuItem subMenu = new ToolStripMenuItem(); if (xel.ChildNodes.Count>1) { subMenu.Text = xel.Attributes["descript"].Value; menuItem.DropDown.Items.Add(subMenu); CreateSubMenuByElement(xel, subMenu); } else { subMenu.Text = xel.InnerText; menuItem.DropDown.Items.Add(subMenu); } } } /////////////////////////////////////////////////// } } xml文件格式如下: <?xml version="1.0" encoding="utf-8" ?> <MangeTvMenu descript="管理"> <Add descript="添加"> <Employee>員工</Employee> <Deptment>部門</Deptment> </Add> <EmployeeInfo descript="員工信息"> <BaseInfo>個人基本信息</BaseInfo> <StudyInfo>學歷信息</StudyInfo> <MarryInfo>婚姻信息</MarryInfo> </EmployeeInfo> <DeptmentInfo descript="部門信息"> <dept1>部門1</dept1> <dept2>部門2</dept2> </DeptmentInfo> <MoneyManage descript="工資管理"> <BaseMoney>基本工資</BaseMoney> <OtherMoney>績效工資</OtherMoney> </MoneyManage> <Apply descript="申請"> <AddWork>加班</AddWork> <ApplyWeek>請假</ApplyWeek> <AddMoney>加薪</AddMoney> <Another>其他</Another> </Apply> </MangeTvMenu>