4

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

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

当我按下Alt时,第一个菜单A被选中。然后我可以使用←</kbd> and →</kbd> keys to select other menus. That is as it should be.

但是,当我按下↓</kbd> to open a menu, I can still use ←</kbd> and →</kbd> to select other menus, but the order is reversed: ←</kbd> selects the next menu, and →</kbd> the previous.

我无法确定我的本地系统是否有问题,这是否是组件中的错误MenuStrip,或者我是否忘记设置必需的属性。这三个对我来说似乎都很奇怪,因为在这三种情况下,我希望有人已经遇到过这个问题,我什至找不到其他人问这个问题。

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

菜单条问题

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

4

1 回答 1

6

这是MenuStrip.

查看ToolStripDropDown.ProcessArrowKey使用 Reflector 的实现表明箭头键会根据SystemInformation.RightAlignedMenus. 那是不对的。它应该取决于菜单条本身的从右到左模式,有时(通常?)可能会 match SystemInformation.RightAlignedMenus,但并非总是如此,而不是在我的系统上。

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

更新:我实际上使用派生控件来提供漂亮的菜单图像。它基于“Visual Style Menus”上的 Microsoft 示例Vista Menu with Icons in C# 中提供了一个功能更全面的实现,它也适用于 Windows XP 和更早版本(在这种情况下使用所有者绘制的菜单),但这对我来说比必要的复杂。

于 2013-04-30T18:27:01.890 回答