利用explorerBar实现动态的菜单栏,并创建触发事件
SideBar已经玩过怎么实现动态菜单栏了. 那么利用explorerBar控件如何实现? 废话不说了,直接上代码.
#region菜单定义privateDataTabledt_role=newDataTable();privateSqlDBSQL_Base=newSqlDB();stringstrMenu=string.Empty;//用于临时保存主模块名称ExplorerBarGroupItemgroupBox1;ButtonItembuttonItem1;ExplorerBarGroupItemgroupBox2=null;//用于临时保存主模块的控件类型#endregion
#region左边菜单栏设置,因为dockPanel布局是以这个作主界面的,所以利用函数,传用WinForm名称。privateDictionary<string,DockContent>m_FunctionName=newDictionary<string,DockContent>();///<summary>///传入Form名称,调用时直接打开Form,并显示在dockPanel布局里面。(左边菜单栏设置)///</summary>///<paramname="frmName"></param>publicvoidshowFunctionFrm(stringfrmName){if(!m_FunctionName.ContainsKey(frmName)){m_FunctionName.Add(frmName,null);}if(m_FunctionName[frmName]==null||m_FunctionName[frmName].IsDisposed)//如果已经打的Form,则不再打开。{ObjectHandleobj=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显示菜单函数privatevoidMenu_Load(){dt_role=SQL_Base._GetUserRole(SessionInfo._GroupID);//查找登录者的权限for(inti=0;i<dt_role.Rows.Count;i++){//if用于判断,如果是相同主模块,则不再重复添加控件。if(string.IsNullOrEmpty(strMenu)||strMenu!=dt_role.Rows[i]["c_MenuGroupName"].ToString()){groupBox1=newExplorerBarGroupItem();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(newExplorerBarGroupItem[]{groupBox1});buttonItem1=newButtonItem();buttonItem1.Text=dt_role.Rows[i]["c_FunctionName"].ToString();buttonItem1.Tag=dt_role.Rows[i]["c_FrmName"].ToString();buttonItem1.Click+=newSystem.EventHandler(Bar_ItemClicked);groupBox1.SubItems.AddRange(newButtonItem[]{buttonItem1});groupBox2=groupBox1;}elseif(strMenu==dt_role.Rows[i]["c_MenuGroupName"].ToString()){buttonItem1=newButtonItem();buttonItem1.Text=dt_role.Rows[i]["c_FunctionName"].ToString();buttonItem1.Tag=dt_role.Rows[i]["c_FrmName"].ToString();buttonItem1.Click+=newSystem.EventHandler(Bar_ItemClicked);groupBox2.SubItems.AddRange(newButtonItem[]{buttonItem1});}}}#endregion#region创建子模块的当前事件privatevoidBar_ItemClicked(objectsender,EventArgse){//传入object类型,判断哪个子模块触发了当前事件。ButtonItemccim=(ButtonItem)sender;if(ccim.Tag.ToString().Trim()!=""){showFunctionFrm(ccim.Tag.ToString().Trim());//传入WinForm名称}}#endregion
感谢Allen
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。