Winforms MenuStrip带下划线的热键字母

时间:2009-05-06 15:58:18

标签: .net winforms hotkeys underline menustrip

通常,MenuStrip上的热键字母带有下划线。 (& File,& Open等)在我正在处理下划线的项目中出现在设计器中,但不是在运行时。我找不到控制它的属性。有人知道吗?

4 个答案:

答案 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中,有一个设置是否显示下划线。要更改设置,

  1. 右键单击桌面
  2. 选择“属性”
  3. 点击“外观”标签
  4. 点击“效果”按钮
  5. 取消选中标有“隐藏用于键盘导航的带下划线的字母”
  6. 的复选框

答案 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合规性,几乎所有关于这个主题的答案都是改变桌面设置或简洁的“你为什么要这样做?”响应。这不是我听过的最疯狂的要求。