获取左右箭头键选择上一个/下一个菜单而不是下一个/上一个菜单

时间:2013-04-30 17:14:16

标签: winforms menustrip

在完整的应用程序中注意到,但在一个简单的演示中完全可重现:

我的MenuStrip包含三个菜单,ABC。这些菜单中的每一个都包含三个项目A1 / A2 /.../ C2 / C3

当我按 Alt 时,第一个菜单A变为选中状态。然后我可以使用键来选择其他菜单。这是应该的。

然而,当我按打开菜单时,我仍然可以使用来选择其他菜单,但顺序颠倒过来:选择下一个菜单,然后

我无法弄清楚我的本地系统是否有问题,如果这是MenuStrip组件中的错误,或者我忘记设置必需的属性。这三个对我来说都很奇怪,因为在所有三种情况下,我都希望某人已经遇到过这个问题,我甚至找不到其他任何人询问这个问题。

如果我不清楚我在问什么,这是一张图片:

Menu strip problem http://i42.tinypic.com/25uis8m.png

在我忘记提及之前,有没有相关代码。这个演示应用程序是一个全新的WinForms项目,有一个MenuStrip控件添加到其默认形式,并且有三个菜单,每个菜单有三个项目,每个菜单我只设置了文本。

1 个答案:

答案 0 :(得分:5)

这是MenuStrip中的错误/错误。

使用Reflector查看ToolStripDropDown.ProcessArrowKey实现显示箭头键取决于SystemInformation.RightAlignedMenus。那是不对的。 依赖于菜单条本身的从右到左模式,有时(通常?)匹配SystemInformation.RightAlignedMenus,但并非总是如此,而不是我的系统。

SystemInformation.RightAlignedMenus是用户可以通过控制面板,平板电脑设置,其他,用户配置,实际上如果我将其更改为左手,我会让菜单正常运行。我的默认和正确设置是右手。由于MenuStrip组件在我的系统上根本不是键盘可用的,因此我将使用标准MainMenu组件替换它。

更新:我实际上是在使用派生控件来提供漂亮的菜单图像。它基于the Microsoft sample on "Visual Style Menus"。一个功能更全面的实现也适用于Windows XP和之前(在这种情况下使用所有者绘制的菜单)可以在Vista Menu with Icons in C#获得,但这比我需要的更复杂。