利用explorerBar实现动态的菜单栏,并创建触发事件

    SideBar已经玩过怎么实现动态菜单栏了. 那么利用explorerBar控件如何实现? 废话不说了,直接上代码.

创新互联于2013年成立,先为全州等服务建站,全州等地企业,进行企业商务咨询服务。为全州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

        #region 菜单定义
        private DataTable dt_role = new DataTable();
        private SqlDB SQL_Base = new SqlDB();
        string strMenu = string.Empty;//用于临时保存主模块名称
        ExplorerBarGroupItem groupBox1;
        ButtonItem buttonItem1;
        ExplorerBarGroupItem groupBox2 = null;//用于临时保存主模块的控件类型
        #endregion
        #region 左边菜单栏设置,因为dockPanel布局是以这个作主界面的,所以利用函数,传用WinForm名称。
        private Dictionary<string, DockContent> m_FunctionName = new Dictionary<string, DockContent>();
        /// <summary>
        /// 传入Form名称,调用时直接打开Form,并显示在dockPanel布局里面。(左边菜单栏设置)
        /// </summary>
        /// <param name="frmName"></param>
        public void showFunctionFrm(string frmName)
        {
            if (!m_FunctionName.ContainsKey(frmName))
            {
                m_FunctionName.Add(frmName, null);
            }
            if (m_FunctionName[frmName] == null || m_FunctionName[frmName].IsDisposed)//如果已经打的Form,则不再打开。
            {
                ObjectHandle obj = Activator.CreateInstance(Assembly.GetExecutingAssembly().GetName().Name, frmName);
                m_FunctionName[frmName] = (DockContent)obj.Unwrap();
            }
            m_FunctionName[frmName].AutoHidePortion = 0.15;
            m_FunctionName[frmName].Show(dockPanel1, DockState.Document);
        }
        #endregion
        #region 显示菜单函数
        private void Menu_Load()
        {
            dt_role = SQL_Base._GetUserRole(SessionInfo._GroupID);//查找登录者的权限
            for (int i = 0; i < dt_role.Rows.Count; i++)
            {
                //if用于判断,如果是相同主模块,则不再重复添加控件。
                if (string.IsNullOrEmpty(strMenu) || strMenu != dt_role.Rows[i]["c_MenuGroupName"].ToString())
                {
                    groupBox1 = new ExplorerBarGroupItem();
                    groupBox1.SetDefaultAppearance();
                    groupBox1.Expanded = true;
                    groupBox1.Text = strMenu = dt_role.Rows[i]["c_MenuGroupName"].ToString();                    
                    groupBox1.Tag = dt_role.Rows[i]["c_MenuGroupName"].ToString();
                    explorerBar1.Groups.AddRange(new ExplorerBarGroupItem[] { groupBox1 });             
                    buttonItem1 = new ButtonItem();
                    buttonItem1.Text = dt_role.Rows[i]["c_FunctionName"].ToString();
                    buttonItem1.Tag = dt_role.Rows[i]["c_FrmName"].ToString();
                    buttonItem1.Click += new System.EventHandler(Bar_ItemClicked);
                    groupBox1.SubItems.AddRange(new ButtonItem[] { buttonItem1 });
                    groupBox2 = groupBox1;
                }
                else if (strMenu == dt_role.Rows[i]["c_MenuGroupName"].ToString())
                {
                    buttonItem1 = new ButtonItem();
                    buttonItem1.Text = dt_role.Rows[i]["c_FunctionName"].ToString();
                    buttonItem1.Tag = dt_role.Rows[i]["c_FrmName"].ToString();
                    buttonItem1.Click += new System.EventHandler(Bar_ItemClicked);
                    groupBox2.SubItems.AddRange(new ButtonItem[] { buttonItem1 });
                }
            }
        }
        #endregion 
     
        #region 创建子模块的当前事件
        private void Bar_ItemClicked(object sender, EventArgs e)
        {
            //传入object类型,判断哪个子模块触发了当前事件。
            ButtonItem ccim = (ButtonItem)sender;
            if (ccim.Tag.ToString().Trim() != "")
            {
                showFunctionFrm(ccim.Tag.ToString().Trim());//传入WinForm名称
            }
        }
        #endregion

    感谢Allen

文章标题:利用explorerBar实现动态的菜单栏,并创建触发事件
转载来于:https://www.cdcxhl.com/article36/gecpsg.html

成都网站建设公司_创新互联,为您提供网站设计公司建站公司微信小程序品牌网站制作品牌网站建设网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管