当前位置:首页 > > 充电吧
[导读]C# 利用数据库和MenuStrip控件动态生成菜单,设计如图一,拖一个Menustrip控件。 设计实现如下: 1、数据库设计: 列名 数据类型 允许NULL值 描述 MODULENAME nva

C# 利用数据库和MenuStrip控件动态生成菜单,设计如图一,拖一个Menustrip控件。

设计实现如下:

1、数据库设计:

列名 数据类型 允许NULL值 描述 MODULENAME nvarchar(100) 不允许 系统名称 SECTIONNAME nvarchar(100) 不允许 系统名称 FUNCTIONNAME nvarchar(100) 不允许 功能模块 SORTNO smallint 允许 PROMPTNAME nvarchar(100) 允许 creation_date datetime 允许 creation_by nvarchar(50) 允许 last_update_by nvarchar(50) 允许 last_update_date datetime 允许 description nvarchar(200) 允许 WEBPAGE nvarchar(200) 允许 设计页面路径 DISABLED smallint 允许 是否可用 MENU_I int 允许 子级菜单 MENU_J int 允许 父级菜单 EN_MENUNAME nvarchar(100) 允许 菜单英文名 CN_MENUNAME nvarchar(100) 允许 菜单中文名 TD_MENUNAME nvarchar(100) 允许 菜单繁体名

2、数据库数据插入


INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10000, 0, N'System', N'系统', N'系统')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10020, 10000, N'-', N'-', N'-')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10080, 10000, N'LogOut', N'切换帐号', N'切换帐号')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10090, 10000, N'Exit', N'退出系统', N'退出系统')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'ChangePassword.frmChangePassword', 1, 10010, 10000, N'ChangePassword', N'修改密码', N'修改密码')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基础资料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 50000, 0, N'BasicSetting', N'基础设置', N'基础设置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基础资料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmBasicSetting', 1, 50010, 50000, N'Basic Setting', N'基础资料设置', N'基础资料设置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 60000, 0, N'TEST Page', N'测试界面', N'测试界面')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest', 1, 60010, 60000, N'TEST Page 1', N'测试界面1', N'测试界面1')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest2', 1, 60020, 60000, N'TEST Page 2', N'测试界面2', N'测试界面2')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest3', 1, 60030, 60000, N'TEST Page 3', N'测试界面3', N'测试界面3')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest4', 1, 60040, 60000, N'TEST Page 4', N'测试界面4', N'测试界面4')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest5', 1, 60050, 60000, N'TEST Page 5', N'测试界面5', N'测试界面5')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.AnyTest6', 1, 60060, 60000, N'TEST Page 6', N'测试界面6', N'测试界面6')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基础资料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmVenderInfo', 1, 50020, 50000, N'Vender Info', N'客户档案设置', N'客户档案设置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基础资料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmMaterialInfo', 1, 50030, 50000, N'Material Info', N'产品档案设置', N'产品档案设置')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'测试界面', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'TEST.frmEncryp', 1, 60070, 60000, N'EncryOrDecry', N'加密解密', N'加密解密')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'基础资料', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'BasicSetting.frmMaterialInfo2', 1, 50040, 50000, N'Material Info 2', N'产品档案设置2', N'产品档案设置2')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'条码管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 70000, 0, N'BarCode Center', N'条码管理中心', N'条码管理中心')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'条码管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'Printing.frmPrintTest1', 1, 70010, 70000, N'BarCode Test 1', N'条码打印测试1', N'条码打印测试1')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'条码管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10030, 10000, N'System Tools', N'系统工具', N'系统工具')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'条码管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10031, 10030, N'记事本', N'记事本', N'记事本')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'条码管理中心', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'', 1, 10032, 10030, N'计算器', N'计算器', N'计算器')
INSERT [dbo].[MODULEFUNCTION_T] ([MODULENAME], [SECTIONNAME], [FUNCTIONNAME], [SORTNO], [PROMPTNAME], [creation_date], [creation_by], [last_update_by], [last_update_date], [description], [WEBPAGE], [DISABLED], [MENU_I], [MENU_J], [EN_MENUNAME], [CN_MENUNAME], [TD_MENUNAME]) VALUES (N'RobotWMS', N'RobotWMS', N'系统', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 10040, 10000, N'-', N'-', N'-')


C#代码实现如下:

页面LOAD事件:

private void frmMainFrame_Load(object sender, EventArgs e)
        {            
            //加载菜单
            LoadMenu2();

        }


private void LoadMenu2()
        {
//从数据库获取菜单列表
            string sql = " SELECT T.MENU_I, T.MENU_J, T.EN_MENUNAME, T.CN_MENUNAME, T.TD_MENUNAME,webpage  FROM DBO.MODULEFUNCTION_T T WHERE T.MODULENAME = '" + Application.ProductName + "'   AND T.DISABLED = '1'  ORDER BY T.MENU_J, T.MENU_I ";
            DataTable dt = db.GetTableInfoBySQL(sql, db.sqlDB);
            CreateMainMenu(MainMenuStrip, dt);
        }

        void CreateMainMenu(MenuStrip menuStrip, DataTable dt)
        {
            try
            {
                DataRow[] drs = dt.Select("MENU_J = '0'", "MENU_J");
                if (drs.Length > 0)
                {
                    foreach (DataRow item in drs)
                    {
                        ToolStripMenuItem mi = new ToolStripMenuItem();
                        mi.Text = item["CN_MENUNAME"].ToString();
                        CreateMenuItem(mi, item["MENU_I"].ToString(), dt);
                        menuStrip.Items.Add((ToolStripItem)mi);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Assert(false, ex.Message);
            }
        }

        void CreateMenuItem(ToolStripMenuItem mi, string fatherid, DataTable dt)
        {
            DataRow[] drs = dt.Select("MENU_J='" + fatherid + "'", "MENU_J");
            if (drs.Length > 0)
            {
                foreach (DataRow item in drs)
                {
                    ToolStripMenuItem mitem = new ToolStripMenuItem();
                    mitem.Text = item["CN_MENUNAME"].ToString();
                    mitem.Tag = item;
                    CreateMenuItem(mitem, item["MENU_I"].ToString(), dt);
                    mi.DropDownItems.Add(mitem);
                    mitem.Click += new EventHandler(BindClickToInstinse);
                }
            }
        }

        void BindClickToInstinse(object sender, EventArgs e)
        {
            ToolStripMenuItem mi = sender as ToolStripMenuItem;
            if (mi.HasDropDownItems)//如果有下一级目录就不实例化
            {
                return;
            }           
           

            DataRow dr = mi.Tag as DataRow;

            //切换帐号
            if (dr["CN_MENUNAME"].ToString() == "切换帐号")
            {
                Application.Restart();
            }
            //分隔线 不用管
            if (dr["CN_MENUNAME"].ToString() == "-")
            {
                return;
            }
            //退出系统
            if (dr["CN_MENUNAME"].ToString() == "退出系统")
            {
                DialogResult drt = new DialogResult();
                drt = MessageBox.Show(this, "你确定要退出系统吗", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (drt == DialogResult.Yes)
                {
                    Application.Exit();
                }
                else
                {
                    return;
                }
            }            
            //启动记事本
            if (dr["CN_MENUNAME"].ToString() == "记事本")
            {
                System.Diagnostics.Process.Start("notepad.exe");
                return;
            }
            //启动计算器
            if (dr["CN_MENUNAME"].ToString() == "计算器")
            {
                System.Diagnostics.Process.Start("calc.exe");
                return;
            }
            try
            {             
                ObjectHandle t = Activator.CreateInstance(Application.ProductName, Application.ProductName + "." + dr["webpage"].ToString());
                Form frm = (Form)t.Unwrap();
                Form[] mdiChilds = this.MdiChildren;
                if (mdiChilds.Length == 1)
                {
                    mdiChilds[0].Close();
                    mdiChilds[0].Dispose();
                }
                frm.MdiParent = this;
                frm.WindowState = FormWindowState.Maximized;
                frm.Top = 0;
                frm.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }



图一:设计页面

图二:效果图:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

目前主流的面向对象的编程语言C#、C++、Java; 一、C#的特点: C#在带来对应用程序的快速开发能力的同时,并没有牺牲C与C++程序员所关心的各种特性。它忠实地继承了C和C++的优点。如果你对C

关键字: c# 面向对象编程

作者:朱金灿来源:http://blog.csdn.net/clever101         什么是好的开发语言和好的开发框架?这个问题可能一千个人有一千种答案,我的答案是在满足用户效率需要的前提下

关键字: c# QT

关于边缘改进全局阈值处理基本实现是: 1.先计算其边界,利用拉普拉斯或者梯度变换都以。 2.计算变化后边界图像的绝对值3.指定一个阈值(一般以百分比的形式指定,比如我指定90%,如果存在有灰度k,灰度

关键字: c# 函数

DES加密应该是最基础的加密算法。DES一共就有4个参数参与运作:明文、密文、密钥、向量。为了初学者容易理解,可以把4个参数的关系写成:密文=明文+密钥+向量;明文=密文-密钥-向量。为什么要向量这个

关键字: c# des算法

用过C#的人,一般都知道委托和事件。如果没有用过C#,我在这里简单解释一下委托,如果用过了,下面可以skip。委托是一个方法声明,我们知道,在C语言中,可以通过函数指针表示一个地址的CALL方法,委托

关键字: c# c++

我刚用C#一个来月,可能理解得不对,还请大家指教。读懂文章你需要对C语言的指针有所理解。需要注意区别:对C\C++来说,任何类型都可以当成C#的“引用类型”,因为有指针。【在内存上】void foo(

关键字: c#

最近有段时间因为有个项目一直需要Socket数据传输。所以呢没办法就整了一套Socket最简单的版本出来。以便自己日后方便使用。我遇到的程序Socket是通过Tcp Ip的方式进行数据传输的.不多说先

关键字: c# socket

C#中的Invoke  转载▼在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上

关键字: .net c#

引言HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差 异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态

关键字: c# http服务器

今天有个朋友遇见了一个问题,在使用qml中Menu控件时不知道如何设置字体颜色或其他样式,于是我看了下官方文档,当前版本为Qt 5.9系列,看了文档之后,发现只有使用import QtQuick.Co

关键字: menu qml menu自定义实现
关闭