先定义菜单Xml文件对象
[XmlRoot("ListMenu")]
public class Menu
{
/// <summary>
/// 菜单显示名称
/// </summary>
public string Text { get; set; }
/// <summary>
/// 子菜单
/// </summary>
[XmlArray("SubMenu")]
[XmlArrayItem("MenuItem")]
public List<Menu> Items { get; set; }
/// <summary>
/// 传递的数据
/// </summary>
public MenuData Tag { get; set; }
}
public class MenuData
{
/// <summary>
/// 参数
/// </summary>
public BClass bClass { get; set; }
public List<TClass> Data { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public string EventHandler { get; set; }
}
定义XML 文件
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMenu1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Menu>
<Text>文件</Text>
<SubMenu>
<MenuItem>
<Text>B1</Text>
<SubMenu>
<MenuItem>
<Text>No.1</Text>
<Tag>
<bClass>B1</bClass>
<Data>
<TClass>D</TClass>
<TClass>S</TClass>
<TClass>S</TClass>
</Data>
<EventHandler>SelectView</EventHandler>
</Tag>
</MenuItem>
<MenuItem>
<Text>No.2</Text>
<Tag>
<bClass>B1</bClass>
<Data>
<TClass>D</TClass>
<TClass>S</TClass>
<TClass>S</TClass>
<TClass>S</TClass>
</Data>
<EventHandler>SelectView</EventHandler>
</Tag>
</MenuItem>
<MenuItem>
<Text>No.3</Text>
<Tag>
<bClass>B1</bClass>
<Data>
<TClass>Y</TClass>
<TClass>N</TClass>
<TClass>N</TClass>
</Data>
<EventHandler>SelectView</EventHandler>
</Tag>
</MenuItem>
<MenuItem>
<Text>No.4</Text>
<SubMenu>
<MenuItem>
<Text>No.4.1</Text>
</MenuItem>
<MenuItem>
<Text>No.4.2</Text>
<SubMenu>
<MenuItem>
<Text>No.4.2.1</Text>
</MenuItem>
</SubMenu>
</MenuItem>
</SubMenu>
</MenuItem>
</SubMenu>
</MenuItem>
</SubMenu>
</Menu>
<Menu>
<Text>Help</Text>
</Menu>
</ArrayOfMenu1>
创建方法
void CreateMenu(List<Menu> menus, MenuStrip PMenu, EventHandler Click)
{
foreach (var item in menus)
{
ToolStripMenuItem next = new ToolStripMenuItem(item.Text);
if (Click != null && item.Tag != null)
{
next.Tag = item.Tag;
next.Click += Click;
}
if (item.Items != null && item.Items.Count>0)
{
CreateMenu(item.Items, next, Click);
}
PMenu.Items.Add(next);
}
}
void CreateMenu(List<Menu> menus, ToolStripMenuItem menuItem, EventHandler Click)
{
foreach (var item in menus)
{
CreateMenu(item, menuItem,Click);
}
}
void CreateMenu(Menu item, ToolStripMenuItem menuItem,EventHandler Click)
{
ToolStripMenuItem next = new ToolStripMenuItem(item.Text);
menuItem.DropDownItems.Add(next);
if (item.Items == null || item.Items.Count==0)
{
if (item.Tag != null && Click != null)
{
next.Click += Click;
next.Tag = item.Tag;
}
}
else
{
CreateMenu(item.Items, next,Click);
}
}
//调用方法
List<Menu> menus;
const string MenuXml = "./Menu.xml";
Common.Deserialize(MenuXml, out menus);
CreateMenu(menus, PMenu, Click);
结果: