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

来源:互联网 发布:mac dns设置多少 编辑:程序博客网 时间:2024/06/11 20:57

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

        #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

本文出自 “9212950” 博客,请务必保留此出处http://9222950.blog.51cto.com/9212950/1603294

阅读全文
0 0