c winform reads the code for the xml file creation menu
- 2020-05-17 06:16:47
- OfStack
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# engineering \WinformMenu\WinformMenu\XML\ The menu .xml";
createMenu(xmlFileName, menuS);
}
public void createMenu(string xmlFileName, MenuStrip menuS)
{
//1 : according to the XmlElement Create a menu
//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 : according to the XmlNode Create a menu
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>
/// According to the node The node recursively creates the menu
/// </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>
/// Create menus recursively from element nodes
/// </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);
}
}
}
///////////////////////////////////////////////////
}
}
The xml file format is as follows:
<?xml version="1.0" encoding="utf-8" ?>
<MangeTvMenu descript=" management ">
<Add descript=" add ">
<Employee> employees </Employee>
<Deptment> department </Deptment>
</Add>
<EmployeeInfo descript=" Employee information ">
<BaseInfo> Basic personal information </BaseInfo>
<StudyInfo> Education information </StudyInfo>
<MarryInfo> Marriage information </MarryInfo>
</EmployeeInfo>
<DeptmentInfo descript=" Department information ">
<dept1> department 1</dept1>
<dept2> department 2</dept2>
</DeptmentInfo>
<MoneyManage descript=" The salary management ">
<BaseMoney> Basic salary </BaseMoney>
<OtherMoney> Merit pay </OtherMoney>
</MoneyManage>
<Apply descript=" To apply for ">
<AddWork> Work overtime </AddWork>
<ApplyWeek> Ask for leave </ApplyWeek>
<AddMoney> A raise </AddMoney>
<Another> other </Another>
</Apply>
</MangeTvMenu>