在完整的应用程序中注意到,但在一个简单的演示中完全可重现:
我的MenuStrip
包含三个菜单,A
,B
和C
。这些菜单中的每一个都包含三个项目A1
/ A2
/.../ C2
/ C3
。
当我按 Alt 时,第一个菜单A
变为选中状态。然后我可以使用←和→键来选择其他菜单。这是应该的。
然而,当我按↓打开菜单时,我仍然可以使用←和→来选择其他菜单,但顺序颠倒过来:←选择下一个菜单,然后→。
我无法弄清楚我的本地系统是否有问题,如果这是MenuStrip
组件中的错误,或者我忘记设置必需的属性。这三个对我来说都很奇怪,因为在所有三种情况下,我都希望某人已经遇到过这个问题,我甚至找不到其他任何人询问这个问题。
如果我不清楚我在问什么,这是一张图片:
Menu strip problem http://i42.tinypic.com/25uis8m.png
在我忘记提及之前,有没有相关代码。这个演示应用程序是一个全新的WinForms项目,有一个MenuStrip
控件添加到其默认形式,并且有三个菜单,每个菜单有三个项目,每个菜单我只设置了文本。
答案 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#获得,但这比我需要的更复杂。