代码之家  ›  专栏  ›  技术社区  ›  BoltClock

Windows窗体中的标准Windows菜单栏

  •  34
  • BoltClock  · 技术社区  · 14 年前

    我注意到,在窗体设计中添加 menustrip(从工具箱中)不会产生与许多本机Windows应用程序中看到的菜单栏类似的菜单栏。相反,我得到了一个类似于Visual Studio自己的菜单栏。 menustrip appear to mimic the more common native menu bar.

    有没有办法在我的Windows窗体应用程序中添加一个与记事本、任务管理器和其他程序中相同的菜单栏?(最好是与设计师合作,但我也不介意以编程方式添加它。)

    插图截图:

    在我的窗体设计中,不会产生像在许多本机Windows应用程序中看到的那样的菜单栏。相反,我得到了一个类似于Visual Studio自己的菜单栏。没有的样式设置 主菜单 似乎模仿了更常见的本地菜单栏。

    有没有办法在我的Windows窗体应用程序中添加一个与记事本、任务管理器和其他程序中相同的菜单栏?(最好是与设计师合作,但我也不介意以编程方式添加它。)

    插图截图:

    4 回复  |  直到 12 年前
        1
  •  52
  •   anon271334    14 年前

    这很容易。

    转到工具箱,右键单击内部任意位置并选择“选择项”。当对话框加载并显示时,向下滚动直到看到主菜单。把它加到工具箱里,你就有了一个本地菜单栏!

    快乐编码!

        2
  •  20
  •   MusiGenesis    14 年前

    您可以通过设置窗体的 Menu 属性,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Menu = new MainMenu();
            MenuItem item = new MenuItem("File");
            this.Menu.MenuItems.Add(item);
                item.MenuItems.Add("Save", new EventHandler(Save_Click));
                item.MenuItems.Add("Open", new EventHandler(Open_Click)); 
            item = new MenuItem("Edit");
            this.Menu.MenuItems.Add(item);
                item.MenuItems.Add("Copy", new EventHandler(Copy_Click));
                item.MenuItems.Add("Paste", new EventHandler(Paste_Click)); 
            // etc ...
    }
    
    private void Save_Click(object sender, EventArgs e)
    {
        // save
    }
    

    这些菜单看起来像“普通”系统菜单。

    不过,我找不到设计师对此的支持。在我的辩护中,我没有真正努力。

        3
  •  8
  •   Cris McLaughlin    12 年前

    而不是使用 MainMenu 组件可以为 MenuStrip 组件。这里的优势是能够将图像添加到 MenuStripItem 物体。下面是自定义渲染器的Pastebin:

    NativeRenderer

    渲染器的构造函数中可以应用不同的主题。尝试所有这些主题以查看本机主题。要使用此渲染器,只需将实例设置为 主菜单 呈现器属性:

    menuStrip.Renderer = new NativeRenderer([theme]);
    
        4
  •  4
  •   Charlie Salts    14 年前

    我通常会设置菜单条 RenderMode System 它提供了一个极简的,单一颜色的菜单(没有渐变或任何类似的颓废)。

    如果这还不够远,那么你很可能需要跳过一些低级别的篮球来获得你想要的。