通常,MenuStrip上的热键字母带有下划线。 (& File,& Open等)在我正在处理下划线的项目中出现在设计器中,但不是在运行时。我找不到控制它的属性。有人知道吗?
答案 0 :(得分:14)
您可以通过创建自定义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的Form中,在构造函数中设置渲染器:
public YourFormConstructor()
{
InitializeComponents();
menuStripName.Renderer = new CustomMenuStripRenderer();
}
我想指出,如果您更喜欢渲染的系统样式外观,可以扩展ToolStripSystemRenderer类而不是Professional,但我喜欢能够自定义颜色表。这是不需要客户端更改其计算机设置的修复程序。享受!
答案 1 :(得分:9)
在Windows中,有一个设置是否显示下划线。要更改设置,
答案 2 :(得分:8)
只有在用户按下alt键时,它们才会在运行时显示。当您按下alt键时,表单会认为您可能想要使用其中一个快捷方式,因此它会显示任何下划线。
答案 3 :(得分:0)
对于与此相关的后续问题,即将其用于所有应用程序热键:
[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合规性,几乎所有关于这个主题的答案都是改变桌面设置或简洁的“你为什么要这样做?”响应。这不是我听过的最疯狂的要求。