Windows 窗体中的标准 Windows 菜单栏
Posted
技术标签:
【中文标题】Windows 窗体中的标准 Windows 菜单栏【英文标题】:Standard Windows menu bars in Windows Forms 【发布时间】:2011-02-16 05:06:04 【问题描述】:我注意到,在我的表单设计中添加MenuStrip
(来自工具箱)并不会像在许多本机 Windows 应用程序中看到的那样生成菜单栏。相反,我得到了一个类似于 Visual Studio 自己的菜单栏。 MenuStrip
的样式设置似乎都没有模仿更常见的本机菜单栏。
有没有一种方法可以将菜单栏添加到我的 Windows 窗体应用程序中,该菜单栏看起来与您在记事本、任务管理器和其他应用程序中看到的一样? (最好与设计师一起,但我也不介意以编程方式添加它。)
说明截图:
【问题讨论】:
它与记事本或 Windows 资源管理器中的菜单有何不同?它与 Office 2003 中的非常相似,因此并不罕见。 【参考方案1】:我通常将 MenuStrip 的 RenderMode
设置为 System
,这提供了一个简约的单色菜单(没有渐变或任何类似的颓废)。
如果这还不够,那么您可能需要跳过一些低级的障碍才能得到您想要的。
【讨论】:
【参考方案2】:您可以通过设置表单的 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
这些菜单看起来像“普通”系统菜单。
不过,我找不到任何设计师对此的支持。在我的辩护中,我并没有真正努力。
【讨论】:
有一个更简单的解决方案。它可以在“选择项目”对话框中找到。该组件名为“MainMenu”,也支持表单设计器。 这是一个很好的答案。它可能不像使用设计器那样简单或友好,但不值得一票。 我同意。这是一个很好的答案,当我在没有安装 IDE 的计算机上处理项目时会派上用场!我刚想投票,但它说问题太旧了,在编辑问题之前我不能投票,对吧? @jts:它已被编辑(因此您可以撤消您的反对票),我接受您的道歉。 :) 不过,我是个笨蛋——我确实查看了“选择项目”对话框,发现里面有 3 个 MainMenu 控件,其中 2 个已经被检查过,尽管我的工具箱中没有一个,所以我很早就放弃了。我尽量不要在午夜之后与 Visual Studio 搏斗。 对不起。不要对自己太苛刻,我们所有人都可能发生:-)【参考方案3】:转到您的工具箱,右键单击里面的任意位置并选择“选择项目”。
当对话框加载并出现时,向下滚动直到看到 MainMenu。将其添加到工具箱中,您就拥有了一个原生菜单栏!
【讨论】:
哇,我不知道我可以像这样将东西添加到我的工具箱中。非常感谢! 我不知道这个组件。我试了一下,它非常有限:我无法在设计器中更改颜色,不支持本地化,没有图像等。如果这是你想要的,那就去吧. 有个原因导致它被 MenuStrip 取代。 是的,是的。我不需要较新的 MenuStrip 的多功能性,所以我愿意接受这样的选择。我也刚刚发现它是一个 .NET Framework 2.0 类。 是的。如果在 MainMenu 中有我喜欢的一件事,那就是在菜单项旁边添加图像的选项...MenuItem
的一些构造函数将Image
作为参数,所以我认为可以添加图像,但不能来自设计器。【参考方案4】:
您可以为MenuStrip
组件创建自己的渲染器,而不是使用MainMenu
组件。这里的优点是能够将图像添加到MenuStripItem
对象。这是自定义渲染器的粘贴箱:
NativeRenderer
可以在渲染器的构造函数中应用不同的主题。全部尝试以查看原生主题。要使用此渲染器,只需将实例设置为 MenuStrip
Renderer 属性:
menuStrip.Renderer = new NativeRenderer([theme]);
【讨论】:
哦,这看起来很有用!如果我最终使用它(我有点转向greener pastures),我很想感谢来源。还是在公共领域? :) 抱歉 BoltClock,我已经很久没有潜伏在这里了。我一直在努力寻找原作者(它发布在 code.google.com 的某个地方)。找到原始链接后我会发布。 @BoltClock 我找到了!请把所有的功劳归功于这位天才:code.google.com/p/szotar/source/browse/trunk/Client/… 好像找不到ToolbarTheme类型以上是关于Windows 窗体中的标准 Windows 菜单栏的主要内容,如果未能解决你的问题,请参考以下文章