65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.78/5 (14投票s)

2007年4月2日

CPOL

2分钟阅读

viewsIcon

127458

downloadIcon

7812

本文介绍如何创建一个具有 Outlook Express 栏或 DHTML 菜单风格的用户控件。

Screenshot - scrnshot.jpg

引言

为了一个我的业余项目,我想要使用一个“主菜单”。与其使用 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 用于子菜单项。

历史

我仍在修改用户控件。 每当添加重大更改时,我将更新本文。 感谢您尝试我的用户控件。

© . All rights reserved.