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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。