正如其他答案中提到的,这是默认行为。仅在按下 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());
}
找到here。
正如我刚刚验证过的(在ken2k 在 cmets 中的建议之后),这很不幸地影响了整个系统。所以它需要一些调整:1)在启动时记住SPI_SETKEYBOARDCUES的当前值2)在退出时将设置重置为这个值,3) 创建域异常处理程序,以确保设置总是被重置。
不幸的是,即使最后一个参数为零,即使documentation 说:
如果您不想更新用户配置文件或广播 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);
}
在this answer 中,您可以找到一个代码示例,说明如何仅为您的应用程序在本地实现这一点。