7

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

4

5 回答 5

15

您可以通过创建自定义 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,但我喜欢能够自定义颜色表。这是不需要客户端更改其计算机设置的修复程序。享受!

于 2009-08-08T14:16:27.763 回答
10

在 Windows 中,有一个是否显示下划线的设置。要更改设置,

  1. 右键单击桌面
  2. 选择“属性”
  3. 单击“外观”选项卡
  4. 点击“效果”按钮
  5. 取消选中标有“隐藏带下划线的字母以进行键盘导航”的框
于 2009-05-06T16:05:32.013 回答
8

它们只会在用户按下 alt 键时出现在运行时。当您按下 alt 键时,表单会认为您可能想要使用其中一个快捷方式,因此它会显示任何下划线。

于 2009-05-06T16:02:15.063 回答
1

对于与此相关的后续问题,即使其适用于所有应用程序热键:

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

于 2015-10-08T22:55:31.977 回答
0

在 Windows 10 中,该设置位于

Settings- Ease of Access- Keyboard-Underline access keys when available

Change how keyboard shortcuts work section.

于 2021-09-29T22:28:04.390 回答