zoukankan      html  css  js  c++  java
  • c# winform读取xml创建菜单

      动态创建菜单使得程序灵活性大大增加,本文根据读取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#工程WinformMenuWinformMenuXML菜单.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>

    效果如下图所示:

     

    xmlHelper为自己写的一个操作xml的类,由于比较简单在此就不贴代码了。

    发现如果将xel.ChildNodes.Count>1(也就是上面红色字体代码)换成xel.HasChildNodes程序就会报错,目前正在思考此问题,欢迎广大朋友指点。

  • 相关阅读:
    2020软件工程作业00——问题清单
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业00
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/james1207/p/3320283.html
Copyright © 2011-2022 走看看