zoukankan      html  css  js  c++  java
  • WINFORM权限系统开发系列教程(六)主窗口

    主窗口效果

    主窗口代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Xwy.WindowsFormsApp.Common;
    using Xwy.WindowsFormsApp.DAL;
    using Xwy.WindowsFormsApp.Models;
    
    namespace Xwy.WindowsFormsApp
    {
        public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
            }
    
            UserDAL userDAL=new UserDAL();
            MenuDAL menuDAL = new MenuDAL();
            int userId = 0;
    
            private void FrmMain_Load(object sender, EventArgs e)
            {
                //获取传递过来的UserId
                if (this.Tag != null)
                {
                    userId = this.Tag.GetInt();
                }
                if (userId > 0)
                {
                    //获取用户的角色信息
                    List<RoleInfoModel> roles = userDAL.GetUserRoles(userId);
                    bool bl = false;
                    List<MenuInfoModel> menuList = new List<MenuInfoModel>();
                    foreach (RoleInfoModel role in roles)
                    {
                        if (role.IsAdmin==1)
                        {
                            //加载所有菜单列表
                            bl = true;
                            menuList = menuDAL.GetUserMenuList(role.RoleId.ToString()); 
                            break;
                        }
                    }
                    if (!bl)
                    {
                        string roleIds = string.Join(",", roles.Select(r => r.RoleId));
                        //权限菜单
                        menuList = menuDAL.GetUserMenuList(roleIds);
                    }
                    //加载菜单树
                    TreeNode rootNode = new TreeNode();
                    rootNode.Name = "0";
                    rootNode.Text = "权限管理系统";
                    tvMenus.Nodes.Add(rootNode);
                    CreateNode(menuList, rootNode, 0);
                    tvMenus.ExpandAll();
                }
            }
       
            private void CreateNode(List<MenuInfoModel> menuList,TreeNode pNode,int parentId)
            {
                if (menuList.Count > 0)
                {
                    //获取所有的子菜单
                    var childList = menuList.Where(m => m.ParentId == parentId).ToList();
                    foreach (MenuInfoModel menu in childList)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Name = menu.MenuId.ToString();
                        tn.Text = menu.MenuName;
                        if (!string.IsNullOrEmpty(menu.FrmName))
                        {
                            tn.Tag = menu.FrmName;
                        }
                        
                        if (pNode != null)
                        {
                            pNode.Nodes.Add(tn);//节点添加
                        }
                        else
                        {
                            tvMenus.Nodes.Add(tn);
                        }
                        CreateNode(menuList, tn, menu.MenuId);
                    }
                }
                
            }
    
            private void tvMenus_AfterSelect(object sender, TreeViewEventArgs e)
            {
                TreeNode selNode = tvMenus.SelectedNode;
                if (selNode.Tag != null)
                {
                    string url = selNode.Tag.ToString();
                    Form f = null;
                    bool bl = false;
                    //判断当前我要实例化的窗口是否已经打开
                    foreach (Form frm in Application.OpenForms)
                    {
                        if (frm.Name == url)
                        {
                            bl = true;
                            f = frm;
                            f.Show();
                            f.Activate();
                            break;
    
                        }
                    }
                    if (!bl)
                    {
                        //获取程序集的名称
                        string assName = this.GetType().Assembly.GetName().Name;
                        //f = (Form)Activator.CreateInstance(assName,assName+"."+url).Unwrap();或者
                        f = (Form)Activator.CreateInstance(Type.GetType(assName + "." + url));
                        f.MdiParent = this;
                        f.Name = url;
                        f.Show();
                    }
                  
                }
                
            }
    
            private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                //让用户确认到底要不要退出,是--退出 否--不退出
                if (MsgBoxHelper.MsgBoxConfirm("退出系统", "您确定要退出系统吗") == DialogResult.Yes)
                {
                    //Application.Exit();//有问题,弹出两次
                    Application.ExitThread();
                }
                else
                {
                    e.Cancel = true;//如果没有这一句,主页面仍然关闭,但没有退出应用程序
                }
            }
        }
    }
  • 相关阅读:
    asp.net中的Application概述
    Android布局
    Content Provider
    Service
    进程和线程Processes and Threads
    Android模拟器
    Fragment
    Ui Event
    Loader
    sqlite3命令
  • 原文地址:https://www.cnblogs.com/xiewenyu/p/13083563.html
Copyright © 2011-2022 走看看