Nid*_*rax 4 .net c# keyboard-shortcuts visual-studio-2010 toolstripmenu
我的.Net 4.0 ToolStripMenuItem标题有一个小问题.
我希望它强调项目文本中的快捷方式(访问)关键字母.
我在项目文本字段中使用了&符号:'&New map',它在编辑器中看起来很好:

但是,当我构建应用程序时,下划线消失:

有谁知道它为什么会发生以及如何在构建的表单中制作强调显示?
这是Windows的默认行为.除非您使用键盘调用菜单,否则将隐藏加速键.按ALT查看加速器.请注意,您可以在其他程序中看到此行为,例如尝试记事本.
如果要更改自己计算机上的行为,可以将系统配置为始终从轻松访问中心显示加速键.该设置位于" 使键盘更易于使用"下,在我的Windows 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());
}
Run Code Online (Sandbox Code Playgroud)
在这里找到。
正如我刚刚验证的那样(在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);
}
Run Code Online (Sandbox Code Playgroud)
在此答案中,您可以找到一个代码示例,该示例说明如何仅在您的应用程序中本地实现此功能。
| 归档时间: |
|
| 查看次数: |
7518 次 |
| 最近记录: |