winform多级菜单









先定义菜单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);
 
结果:
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值