根据数据库表动态添加菜单及打开窗体

1.引用TabMid.dll 及Janus系列DLL

2.在主界面上拖入Janus.Windows.ButtonBar和System.Windows.Forms.MenuStrip,及

System.Windows.Forms.TabControl控件并布局

3.窗体加载中,先对TabMid.TabMidForm或TabMid.BarMidForm的属性ApplicationNameSpace赋值,应

用程序的命名空间,示例:

tb.ApplicationNameSpace = "MidTest";

4.窗体加载中,查询菜单表tbMemu,返回DataTable,并调用CreatMemu创建菜单,设置单击事件委托

方法,创建菜单代码调用示例和绑定委托方法示例:

tb.CreatMemu(menuStrip1.Items, dt, "0");
bf.CreatMemu(buttonBar1, dt);
tb.MemuClickFunction 
= MemuClickT;
bf.MemuClickFunction 
= BarMemuClickT;

5.ButtonBar图标说明:在主界面上拖入System.Windows.Forms.ImageList并添加图标项,在数据库

表tbMemu里的字段flngICO设置相应的Index(必须设置)


6.在委托方法中调用TabMidFormShow或BarMidFormShow方法打开窗体,单击委托方法示例:


private void MemuClickT(object sender, EventArgs e)
        {
            
//打开窗体
            ToolStripMenuItem tab = (ToolStripMenuItem)sender;
            tb.TabMidFormShow(tct, tab.Tag.ToString(), tab.Text);            
        }
        
private void BarMemuClickT(object sender,Janus.Windows.ButtonBar.ItemEventArgs 

e)
        {
            
//打开窗体
            Janus.Windows.ButtonBar.ButtonBarItem itm = 

(Janus.Windows.ButtonBar.ButtonBarItem)sender;
            bf.BarMidFormShow(tct, itm.Tag.ToString(), itm.Text);
        }

7.最后在TabControl控件的双击事件中加入关闭TAB的代码,示例:

private void tct_DoubleClick(object sender, EventArgs e)
        {
            
//关闭窗体
            int i = tct.SelectedIndex;
            tct.TabPages.RemoveAt(i);
        }

8.关于权限控制菜单,可以根据权限表和菜单表创建一个视图,只要视图中包含tbMemu表中的所有列

即可

9.添加新的窗体后,将窗体的命名空间修改为一层,如:MidTest。再在数据库表tbMemu添加一条新

记录:
fstrCode  窗体的类名
fstrName  菜单的TEXT
flngFatherID  上级菜单的flngID
flngICO   ButtonBar图标,看第5步骤


 下载源码

原理:通过数据库表的结构和数据使用递归方式创建菜单的项,再根据菜单项使用System.Activator.CreateInstance的方式创建窗体并显示

原文地址:https://www.cnblogs.com/yunxizfj/p/1595135.html