Windows 窗体的导航菜单(Outlook 条样式)






2.78/5 (14投票s)
本文介绍如何创建一个具有 Outlook Express 栏或 DHTML 菜单风格的用户控件。
- 下载适用于 VS2013/2015 的演示项目(不含 EXE)- 68.2 KB
- 下载适用于 VS2013/2015 的演示项目 - 68.2 KB
- 下载源代码 - 1.6 KB
- 下载演示 - 19 KB
引言
为了一个我的业余项目,我想要使用一个“主菜单”。与其使用 Windows 的菜单功能,我考虑使用一些 DHTML 风格的下拉列表菜单。 搜索后,我得到了许多付费和免费的控件,其中我最喜欢 Infragestics 控件。 但实际上,这很麻烦;我必须安装整个东西,我的项目变得太大了,而且性能也降低了。 所以我想我必须开发我梦想中的用户控件。
我想与您分享我的新用户控件,以便您也可以使用它。 如果您了解 C#,它很容易自定义。
Using the Code
只需下载代码并添加到您的 Windows Forms 项目中。可以使用以下方式将菜单项添加到控件:
ArrayList NavItems = new ArrayList();
ArrayList childNavItems = new ArrayList();
childNavItems.Add(new ctrlMenuBar.childNavItems("Leads", "mnuLeads"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Project List",
"mnuProjectList"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Development",
"mnuDevelopment"));
ctrlMenuBar.NavItem nv = new ctrlMenuBar.NavItem("Projects", "mnuProjects",
childNavItems, true);
NavItems.Add(nv);
在以下行中:ctrlMenuBar.NavItem("Projects", "mnuProjects", childNavItems,true);
,true
用于告诉控件是否为选定的项目。 此参数是可选的。 如果您在多个项目上放置 true
,则最后一个项目将是选定的项目。
要渲染菜单,您必须调用该方法
ctrlMenuBar1.RenderMenu();
典型的菜单初始化部分如下所示
private void frmMain_Load(object sender, EventArgs e)
{
ArrayList NavItems = new ArrayList();
ArrayList childNavItems = new ArrayList();
childNavItems.Add(new ctrlMenuBar.childNavItems("Leads", "mnuLeads"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Project List",
"mnuProjectList"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Development",
"mnuDevelopment"));
ctrlMenuBar.NavItem nv = new ctrlMenuBar.NavItem("Projects",
"mnuProjects", childNavItems, true);
NavItems.Add(nv);
childNavItems = new ArrayList();
childNavItems.Add(new ctrlMenuBar.childNavItems("Client List",
"mnuClientList"));
nv = new ctrlMenuBar.NavItem("Clients", "mnuClients", childNavItems);
NavItems.Add(nv);
childNavItems = new ArrayList();
childNavItems.Add(new ctrlMenuBar.childNavItems("Developer List",
"mnuDeveloperList"));
nv = new ctrlMenuBar.NavItem("Developers", "mnuDevelopers",
childNavItems);
NavItems.Add(nv);
childNavItems = new ArrayList();
childNavItems.Add(new ctrlMenuBar.childNavItems("Reports","mnuReports"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Events", "mnuEvents"));
childNavItems.Add(new ctrlMenuBar.childNavItems("Documents",
"mnuDocuments"));
nv = new ctrlMenuBar.NavItem("Utilities", "mnuUtilities", childNavItems);
NavItems.Add(nv);
ctrlMenuBar1.MenuItems = NavItems;
ctrlMenuBar1.RenderMenu();
}
您可以从控件捕获按钮单击事件到 OnMenuSelection()
方法。
private void ctrlMenuBar_OnMenuSelection(object sender, EventArgs e)
{
Button btn = (Button)sender;
label1.Text = "You clicked: " + btn.Name;
}
幕后花絮
在幕后,用户控件(ctrlMenuBar.cs)使用一个主类 ctrlMenuBar
和两个子类:NavItem
用于父菜单项,以及 childNavItems
用于子菜单项。
历史
我仍在修改用户控件。 每当添加重大更改时,我将更新本文。 感谢您尝试我的用户控件。