Winform通用框架之权限管理系统---------菜单

软件的整体主页布局是用到了WeifenLuo.WinFormsUI.Docking;的可拖拉式布局,和我们常用的VS 工具效果一样。这样的好处是菜单页和内容页的窗口在编码的时候可以分离,互不影响。

菜单是抽屉式布局,废话不多说先上代码

  /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmLeft_Load(object sender, EventArgs e)
        {
            Init();
        }
        private void Init()
        {
            this.panel1.Controls.Clear();
            this.panel1.Controls.Add(this.listView1);
            this.listView1.Clear();
            //查询菜单的父节点,先把父节点打上去
            m_Parent = bll.GetSysMenusParent(FrmLogin.LoginUserID);
            int i = m_Parent.Count;
            foreach (var item in m_Parent)
            {
                Button b = new Button();
                b.Text = item.Menu_Name;
                b.Dock = DockStyle.Top;
                b.Size = new System.Drawing.Size(244, 30);
                b.Tag = item.Menu_Id;
                b.TabIndex = i;
                b.Click += new System.EventHandler(this.ButtonClick);
                this.panel1.Controls.Add(b);
                i--;
            }
        }
        void ButtonClick(object sender, System.EventArgs e)
        {          
            Button clickedButton = (Button)sender;          
            int clickedButtonTabIndex = clickedButton.TabIndex;        
            foreach (Control ctl in this.panel1.Controls)
            {
                if (ctl is Button)
                {
                    Button btn = (Button)ctl;
                    if (btn.TabIndex > clickedButtonTabIndex)
                    {
                        if (btn.Dock != DockStyle.Bottom)
                        {
                            btn.Dock = DockStyle.Bottom;

                            btn.BringToFront();
                        }
                    }
                    else
                    {
                        if (btn.Dock != DockStyle.Top)
                        {
                            btn.Dock = DockStyle.Top;
                            btn.BringToFront();
                        }
                    }
                }
            }
            foreach (var item in m_Parent)
            {
                 if (clickedButton.Tag.ToString() == item.Menu_Id)
                 {
                     this.listView1.Clear();
       
                    //通过父节点去查找子节点绘制
                     List<Base_SysMenu> Childs = bll.GetSysMenuChilds(clickedButton.Tag.ToString(),FrmLogin.LoginUserID);
                     listView1.LargeImageList = new FrmListImages().imageList1;
                     this.listView1.BeginUpdate();

                     foreach (var itemChilds in Childs)
                     {
                         listView1.Items.Add(new ListViewItem 
                         { 
                             Text = itemChilds.Menu_Name,
                             Tag = itemChilds.Menu_Tag,
                             Name=itemChilds.Menu_Id,
                             ImageIndex = itemChilds.Menu_Img == null ? 0 : itemChilds.Menu_Img.Value 
                         });

                     }

                     this.listView1.EndUpdate();
                     break;
                 }
            }
            listView1.BringToFront();  
           
        }

以上代码执行的效果就是这样的,需要我们点击具体的菜单,才能显示子菜单。

 

 

 

点击子菜单利用了反射,会把具体的内容页绘制到右侧。

实现代码


        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (this.listView1.SelectedIndices.Count > 0)
                {
                    //反射动态实例化窗口
                    object FrmWindow = this.listView1.SelectedItems[0].Tag;
                    object MenuID = this.listView1.SelectedItems[0].Name;
                    if (CheckFormIsOpen(FrmWindow.ToString()))
                    {
                        //DockContent doc = (DockContent)Assembly.Load("YX").CreateInstance("YX." + FrmWindow);
                        //doc.Show(_frmMain.dockPanel1, DockState.Document);

                        Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集                   
                        object[] parameters = new object[1];
                        parameters[0] = MenuID;
                        DockContent obj = (DockContent)assembly.CreateInstance("YX." + FrmWindow, true, System.Reflection.BindingFlags.Default, null, parameters, null, null);// 创建类的实例 
                        obj.Show(_frmMain.dockPanel1, DockState.Document);
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show("还没有配置");
            }

        }

 

winform-培训班管理系统源码(access数据库)是一个基于.Net框架的编程项目,用于实现对培训班的管理和信息记录。该系统的数据库使用了Access数据库作为数据存储的工具。 培训班管理系统主要包括以下功能模块: 1. 培训班信息管理:可以对培训班的基本信息进行录入、查看、修改和删除操作。包括培训班名称、地点、时间、费用等。 2. 学员管理:可以对入学的学员信息进行管理,包括学员姓名、性别、年龄、联系方式等。 3. 课程管理:可以对培训班开设的课程进行管理,包括课程名称、授课老师、上课时间、上课地点等。 4. 成绩管理:可以对学员的成绩进行录入和查询操作,可以统计某个培训班的平均成绩、及格率等数据。 5. 缴费管理:可以对学员的缴费信息进行录入和查询操作,包括缴费日期、缴费金额等。 6. 考勤管理:可以对学员的出勤情况进行记录和查询,可以统计某个培训班的出勤率等数据。 7. 数据统计与报表:可以生成各种报表,如班级成绩统计、学员缴费统计等,方便进行数据分析和决策。 通过该系统,培训机构可以方便地管理培训班的各项工作,包括班级信息、学员管理、课程安排、成绩管理、缴费记录等。同时,可以根据记录的数据进行各种统计和分析,为决策提供参考。使用Access数据库作为数据存储的工具,可以方便地对数据进行增删改查操作。该系统的开发基于.Net平台,使用winform窗体应用程序开发,具有良好的用户界面和用户体验。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值