6

我对 .Net 4.0 ToolStripMenuItem 标题有一个小问题。
我希望它强调项目文本中的快捷方式(访问)键字母。
我在项目文本字段中使用了 & 符号:'&New map',它在编辑器中看起来很好:
在此处输入图像描述

但是,当我构建应用程序时,下划线消失了:
在此处输入图像描述

有谁知道为什么会发生这种情况以及如何以内置形式进行下划线显示?

4

5 回答 5

7

如其他答案所述,这是默认行为。ALT仅在按下该键后才会显示加速器。

但是,似乎可以强制 Windows 不断显示加速键:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int SystemParametersInfo(int uAction, int uParam, int lpvParam, int fuWinIni);

private const int SPI_SETKEYBOARDCUES = 4107; //100B
private const int SPIF_SENDWININICHANGE = 2;

[STAThread]
static void Main()
{
    // always show accelerator underlines
    SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, 1, 0);

    Application.Run(new MainForm());
}

在这里找到。

正如我刚刚验证的那样(在ken2k在评论中提出建议之后),不幸的是,这会影响整个系统。所以它需要一些调整:1)记住SPI_SETKEYBOARDCUES启动时的当前值2)在退出时将设置重置为这个值,3)创建一个域异常处理程序,以确保设置总是被重置回来。

不幸的是,即使最后一个参数为零,即使文档说:

如果您不想更新用户配置文件或广播 WM_SETTINGCHANGE 消息,此参数可以为零

简单的版本当然只是:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int SystemParametersInfo(int uAction, int uParam, int lpvParam, int fuWinIni);

private const int SPI_SETKEYBOARDCUES = 4107; //100B
private const int SPIF_SENDWININICHANGE = 2;

[STAThread]
static void Main()
{
    // always show accelerator underlines
    SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, 1, 0);

    Application.Run(new MainForm());

    SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, 0, 0);
}

这个答案中,您可以找到一个代码示例,说明如何仅为您的应用程序在本地实现这一点。

于 2014-01-03T12:59:06.793 回答
7

这是 Windows 的默认行为。除非您使用键盘调用菜单,否则加速键是隐藏的。按下ALT以查看加速器。请注意,您可以在其他程序中看到此行为,例如尝试记事本。

如果您希望更改您自己机器上的行为,您可以将系统配置为始终从“轻松访问中心”显示加速键。该设置位于使键盘更易于使用下,在我的 Windows 7 机器上如下所示:

在此处输入图像描述

请注意,强烈建议您让用户选择是否隐藏加速键。换句话说,您的应用程序已经正常运行,在我看来,您不应更改其当前行为。

于 2014-01-03T12:56:20.327 回答
2

其他答案已经解释了您正在观察的行为。我不会重复这些。

为了完整起见,并扩展BartoszKP 的答案,有一种方法可以以您的应用程序本地的方式控制加速键的隐藏。具体来说就是WM_UPDATEUISTATE消息。通过UIS_CLEARUISF_HIDEACCEL。我对这个问题的回答显示了如何做到这一点:始终显示热键

于 2014-01-03T14:29:46.893 回答
1

由于 Windows Vista(我认为),默认情况下不显示快捷方式提示。您需要按下Alt才能显示它们。在可访问性设置中有一个全局系统设置来更改该行为。

于 2014-01-03T12:56:32.373 回答
0

默认情况下,Windows 不再显示这些快捷方式。您可以通过进入控制面板中的“轻松访问中心”并在“使键盘更易于使用”部分中勾选“下划线键盘快捷键和访问键”选项重新启用它们,尽管显然这只影响您的计算机'上。

于 2014-01-03T12:58:01.810 回答