通常,MenuStrip 上的热键字母带有下划线。(&File、&Open 等)在我正在处理的项目中,下划线会显示在设计器中,但不会在运行时显示。我找不到控制它的属性。外面有人知道吗?
5 回答
您可以通过创建自定义 ToolStrip 渲染器来强制用户查看下划线。我花了很长时间才弄清楚如何绕过克里斯的回答。这是我创建的渲染器:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace YourNameSpace
{
class CustomMenuStripRenderer : ToolStripProfessionalRenderer
{
public CustomMenuStripRenderer() : base() { }
public CustomMenuStripRenderer(ProfessionalColorTable table) : base(table) { }
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.TextFormat &= ~TextFormatFlags.HidePrefix;
base.OnRenderItemText(e);
}
}
}
然后在带有 MenuStrip 的表单中,在构造函数中设置渲染器:
public YourFormConstructor()
{
InitializeComponents();
menuStripName.Renderer = new CustomMenuStripRenderer();
}
我想指出,如果您更喜欢系统风格的渲染外观,您可以扩展 ToolStripSystemRenderer 类而不是 Professional,但我喜欢能够自定义颜色表。这是不需要客户端更改其计算机设置的修复程序。享受!
在 Windows 中,有一个是否显示下划线的设置。要更改设置,
- 右键单击桌面
- 选择“属性”
- 单击“外观”选项卡
- 点击“效果”按钮
- 取消选中标有“隐藏带下划线的字母以进行键盘导航”的框
它们只会在用户按下 alt 键时出现在运行时。当您按下 alt 键时,表单会认为您可能想要使用其中一个快捷方式,因此它会显示任何下划线。
对于与此相关的后续问题,即使其适用于所有应用程序热键:
[DllImport ("user32.dll")]
static extern void SystemParametersInfo(uint uiAction, uint uiParam, ref
int pvParam, uint fWinIni);
const uint SPI_SETKEYBOARDCUES = 0x100B;
private static void GetAltKeyFixed()
{
//Set pvParam to TRUE to always underline menu access keys,
int pv = 1;
/* Call to systemparametersinfo to set true of pv variable.*/
SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, ref pv, 0);
}
在 Application.Run 或等效之前调用 GetAltKeyFixed。
我需要这个来满足 508 的要求,几乎所有关于这个主题的答案都是更改桌面设置或简洁的“你为什么要这样做?” 回复。这不是我听到的最疯狂的要求。
在 Windows 10 中,该设置位于
Settings
- Ease of Access
- Keyboard
-Underline access keys when available
在Change how keyboard shortcuts work section
.