当前位置:编程学习 > XML/UML >>

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#工程\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);
                }
            }
        }
 /////////////////////////////////////
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,