【问题标题】:Is there a way to force always show mnemonics in menus?有没有办法强制在菜单中始终显示助记符?
【发布时间】:2012-04-15 16:02:57
【问题描述】:

我在我的程序中使用 ContextMenuStrip,显然,除非我按 Alt,否则它不会显示它的快捷键(助记符,那些应该在 & 前面的字母下显示为下划线的快捷键),但是当我按 Alt 时,显示ContextMenuStrip 将隐藏,因为表单的主菜单将获得焦点。因此,在上下文菜单中,永远不会看到助记符!

有没有办法强制我的程序启用此行为?我在其他地方读到过,您可以在系统设置中的某处更改它,但我需要使用我的软件的人始终看到助记符,而不需要他们全局更改系统以使我的程序正常工作!

当用户按下 Enter 时,我必须通过 KeyDown 事件处理程序中的代码显示此菜单,因为它是用于快速编辑控件表示的值的弹出窗口。用户单击控件,可以快速更改其内容。当您在 ctrl+space 上弹出一个弹出窗口时,可以将其想象为在 C# 中,提示您可以在该确切位置插入可能的代码片段。因此,将其用作控件的“上下文菜单”属性或使用键盘“显示上下文菜单”按钮不适用。

谢谢!

【问题讨论】:

  • 它应该是这样工作的。如果您的顶部菜单上有助记符并按 Alt(该菜单的键),您的助记符也会显示在子菜单中..
  • 使用键盘激活菜单时会出现助记符。为此使用 Shift+F10,我们使用您键盘的专用快捷菜单键(如果有的话)。
  • 可能您正在考虑快捷键的属性,您可以在属性窗口中找到它作为设计器的一部分。这将为您提供更多选项(如 Shift 和/或 Ctrl 等)。
  • 是的,但不幸的是,这不是子菜单,而是上下文菜单,它通过在对象的 Click() 事件处理程序中调用 CMS.Show() 来显示。如果我按 Alt,上下文菜单会立即隐藏。
  • 好了。您通过鼠标单击来显示菜单。当然加速器字符不会显示。他们不是故意的;用户使用的是鼠标,而不是键盘,因此无需查看键盘快捷键。显示菜单以响应wm_ContextMenu 消息。这将触发 Shift+F10、右键单击和上下文菜单键。

标签: c# winforms contextmenustrip


【解决方案1】:

这是一个操作系统设置:

控制面板\所有控制面板项目\轻松访问中心\使键盘更易于使用\使键盘快捷键更易于使用\在键盘快捷键和访问键下划线。

【讨论】:

  • 是的,我知道,我想也许有办法在我的软件中覆盖它。
【解决方案2】:

更改上下文菜单的调用方式。不要手动显示,而是使用类似的东西:

textBoxSomething.ContextMenuStrip = yourContextMenuStrip;

在这种情况下,如果用户右键单击文本框(或您使用的其他控件),他将获得没有助记符的菜单。但是如果他使用键盘上下文菜单按钮来显示上下文菜单,就会显示助记符。

【讨论】:

  • 不幸的是这是不可能的(我必须手动打开菜单),但即使可以,请告诉我如何设置“上下文菜单按钮”?当我将 CMS 分配给对象属性时,它只会在右键单击时为我打开
  • 不确定,如果我理解你的话。上下文菜单按钮是键盘上显示上下文菜单的按钮。特殊的 Win 按钮之一。无需分配任何东西。显然不能解决鼠标右击的问题,而是想选择命令为键盘。
  • 啊,我明白了。不,我使用上下文菜单作为弹出编辑器,因此该按钮无济于事。我的程序(它的一部分)正在编辑诸如“变量等于值”之类的语句,并且用户单击或选择并按下“等于”,然后弹出一个菜单,其中包含所有可能的选项,例如“大于”和“不等于”和用户选择。所以,我需要在点击或输入时显示它,而不是在键盘上的“上下文菜单按钮”上显示。
猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多