C#动态创建菜单

C#动态创建菜单

一、加入所需数据
1、创建数据表:

create table t_SysMenu(
FMenuName varchar(50)    not null , 
FMenuText varchar(50)    not null , 
FMenuEvent varchar(100) ,
FMenuShortcutKeys varchar(50) null,
FMenuIcon int default 0,
FMenuSequence int default 0,
FParentNo varchar(21) not null , 
FStatus    char(1) default '1',---
FFlag     char(1) default '1',---
FCreateDate             datetime default getdate()   ,
FCreator           varchar(20) null ,
FModifyDate             datetime default getdate()   ,
FModifier           varchar(20) null ,
FMemo               text null ,
        constraint PK_t_SysMenu primary key(FMenuName) 
)
go


2、插入数据:

MenuItemBase 基础资料(&B) NULL NULL 0
MenuItemBase_01 系统代码 MenuItemBase_01_Click NULL MenuItemBase
MenuItemHelp 帮助(&H) NULL NULL 0
MenuItemHelp_About 关于(&A) MenuItemHelp_About_Click NULL MenuItemHelp
MenuItemHelp_Cat 目录(&C) NULL F1 MenuItemHelp



二、新建项目-> Windows 用应用程序
1、界面如图aa:
拖入一菜单项MenuStrip并命名为sysMenu


2、代码段:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DBClassLib;
namespace SystemMenu
{
    public partial class Form1 : Form
    {
        private string strConnect = "user id=sa;password=; initial catalog=ERP;Server=huite-pc; Connect Timeout=30";
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                sysMenu.Items.Clear();
                SetMenu(sysMenu, "0");
            }
            catch
            {
                MessageBox.Show("创建菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        ///


        /// 
        ///

        /// 主菜单项
        /// 主菜单项名称
        private void SetMenu(MenuStrip mMain,string mName)
        {
            try
            {
                string strSql;
                int i;
                strSql = "SELECT * FROM t_SysMenu WHERE FStatus='1' And FParentNo='" + mName + "' Order by FMenuSequence";
                DBOperator db = DBOperator.GetDBOperator(strConnect);
                DataTable dt = new DataTable();
                db.Open();
                dt = db.GetDataTable(strSql);
                if (dt.Rows.Count > 0)
                {
                    for (i = 0; i < dt.Rows.Count; i++)
                    {
                        if (dt.Rows[i]["FParentNo"].ToString() == "0")
                        {
                            ToolStripMenuItem mItem;
                            mItem = new ToolStripMenuItem(dt.Rows[i]["FMenuText"].ToString());
                            mItem.Name = dt.Rows[i]["FMenuName"].ToString();
//                            mItem.Text = dt.Rows[i]["FMenuText"].ToString();
                            mMain.Items.Add(mItem);
                            SetSubMenu((ToolStripMenuItem)mMain.Items[dt.Rows[i]["FMenuName"].ToString()], dt.Rows[i]["FMenuName"].ToString());
                        }
                    }
                }
                db.Close();
            }
            catch
            {
                MessageBox.Show("创建主菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        ///


        /// 创建子菜单
        ///

        /// 要创建的子菜单的父项
        /// 要创建的子菜单的父项名称
        /// 
        private void SetSubMenu( ToolStripMenuItem mItem,string mName)
        {
            try
            {
                string strSql;
                int i;
                //查询数据库
                strSql = "SELECT * FROM t_SysMenu WHERE FStatus='1' And FParentNo='" + mName + "' Order by FMenuSequence";
                DBOperator db = DBOperator.GetDBOperator(strConnect);
                DataTable dt = new DataTable();
                db.Open();
                dt = db.GetDataTable(strSql);
                for (i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i]["FParentNo"].ToString() == mName)
                    {
                        ToolStripMenuItem mSubItem;
                        EventHandler eh=GetEvent(dt.Rows[i]["FMenuEvent"]); //获得操作事件
                        Keys key = GetShurtcutKeys(dt.Rows[i]["FMenuShortcutKeys"]);//获得快捷键
                        
                        //创建菜单项
                        mSubItem = new ToolStripMenuItem(dt.Rows[i]["FMenuText"].ToString(), imageList1.Images[(int)dt.Rows[i]["FMenuIcon"]],eh,key);
                        mSubItem.Name = dt.Rows[i]["FMenuName"].ToString();
                        //mSubItem.Text = dt.Rows[i]["FMenuText"].ToString();
                        mItem.DropDownItems.Add(mSubItem);
                        //设置子菜单
                        SetSubMenu((ToolStripMenuItem)mItem.DropDownItems[dt.Rows[i]["FMenuName"].ToString()], dt.Rows[i]["FMenuName"].ToString());
                    }
                }
                db.Close();
            }
            catch
            {
                MessageBox.Show("创建子菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        ///
        /// 取菜单事件
        ///

        /// 传入菜单事件对象
        /// EventHandler事件句柄
        protected EventHandler GetEvent(object mEvent)
        {
            EventHandler eh;
            switch (mEvent.ToString())
            {
                case "MenuItemFile_Exit_Click"://退出程序
                    eh = new EventHandler(MenuItemFile_Exit_Click);
                    break;
                case "MenuItemFile_Print_Click"://窗口打印
                    eh = new EventHandler(MenuItemFile_Print_Click);
                    break;
                case "MenuItemWindow_Vertical_Click"://垂直排列窗口
                    eh = new EventHandler(MenuItemWindow_Vertical_Click);
                    break;
                case "MenuItemWindow_CloseAll_Click"://关闭所有子窗口
                    eh = new EventHandler(MenuItemWindow_CloseAll_Click);
                    break;
                case "MenuItemWindow_Cascade_Click"://重叠排列窗口
                    eh = new EventHandler(MenuItemWindow_Cascade_Click);
                    break;
                case "MenuItemWindow_Horizontal_Click"://窗口水平排列
                    eh = new EventHandler(MenuItemWindow_Horizontal_Click);
                    break;
                case "MenuItemHelp_About_Click"://关于窗口
                    eh = new EventHandler(MenuItemHelp_About_Click);
                    break;
                case "MenuItemBase_01_Click"://系统基本代码维护
                    eh = new EventHandler(MenuItemBase_01_Click);
                    break;
                default:
                    eh = new EventHandler(MenuItemNull_Click); 
                    break;
            }
            return eh;
        }
        ///
        /// 获取操作快捷键
        ///

        ///
        ///
        protected Keys GetShurtcutKeys(object mShurtcut)
        {
            Keys key;
            switch (mShurtcut.ToString())
            {
                case "CtrlA":
                    key = (Keys)Shortcut.CtrlA;
                    break;
                case "F1":
                    key = (Keys)Shortcut.F1;
                    break;
                default:
                    key = (Keys)Shortcut.None;
                    break;
            }
            return key;
        
        }

        ///


        /// 空事件
        ///

        ///
        ///
        protected void MenuItemNull_Click(object sender, EventArgs e)
        { 
        
        }
        ///
        /// 退出程序
        ///

        ///
        ///
        private void MenuItemFile_Exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        ///
        /// 窗口打印
        ///

        ///
        ///
        private void MenuItemFile_Print_Click(object sender, EventArgs e)
        {
            MessageBox.Show("菜单事件", "响应", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        ///
        /// 垂直排列窗口
        ///

        ///
        ///
        private void MenuItemWindow_Vertical_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.TileVertical);
        }
        ///
        /// 关闭所有子窗口
        ///

        ///
        ///
        private void MenuItemWindow_CloseAll_Click(object sender, EventArgs e)
        {
            foreach (Form childForm in MdiChildren)
            {
                childForm.Close();
            }
        }
        ///
        /// 重叠排列窗口
        ///

        ///
        ///
        private void MenuItemWindow_Cascade_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.Cascade);
        }
        ///
        /// 窗口水平排列
        ///

        ///
        ///
        private void MenuItemWindow_Horizontal_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.TileHorizontal);
        }
        ///
        /// 关于窗口
        ///

        ///
        ///
        private void MenuItemHelp_About_Click(object sender, EventArgs e)
        {
        }

        ///


        /// 系统基本代码维护
        ///

        ///
        ///
        private void MenuItemBase_01_Click(object sender, EventArgs e)
        {
            //不重复打开窗口
            if (CheckChildForm("FormBaseCode") == false)
            {
                //打开窗口
            }
            else
            {
                //激活窗口
            }
        }
        ///
        /// 检测子窗口是否已打开
        ///

        /// 子窗口名称
        /// bool
        private bool CheckChildForm(string strChildForm)
        {
            bool isOpen = false;
            foreach (Form childForm in MdiChildren)
            {
                if (childForm.Name == strChildForm)
                {
                    isOpen = true;
                    break;
                }
            }
            return isOpen;
        }

    }

你可能感兴趣的:(C#,c#,object,null,string,imagelist,windows)