Winforms MenuStrip 带下划线的热键字母

Posted

技术标签:

【中文标题】Winforms MenuStrip 带下划线的热键字母【英文标题】:Winforms MenuStrip Underlined Hotkey Letter 【发布时间】:2010-10-24 05:44:30 【问题描述】:

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

【问题讨论】:

当你按下 Alt 键时它们会出现吗? 【参考方案1】:

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

【讨论】:

感谢克里斯,您提供的正是我想要的。 可以这样工作,但应用于命令按钮(也可以有热键)?? 很好的解决方案。 ToolStripProfressionalRenderer 上有一个小错字。它应该是 ToolStripProfessionalRenderer。【参考方案2】:

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

    桌面右键 选择“属性” 点击“外观”标签 点击“效果”按钮 取消选中标有“隐藏带下划线的字母以进行键盘导航”的框

【讨论】:

不错的一个。我知道该设置在某个地方,但请记住如何到达它。 谢谢,就是这样。现在问这个问题感觉有点傻。 :-) 我的意思是这真的能解决问题吗?任何获得您的应用程序的用户都需要手动更改该设置,或者您需要向设置应用程序添加一些内容才能自动更改设置。 请查看我下面的帖子以获得更好的解决方案【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

在 windows 10 中设置是在

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

Change how keyboard shortcuts work section.

【讨论】:

以上是关于Winforms MenuStrip 带下划线的热键字母的主要内容,如果未能解决你的问题,请参考以下文章

WinForms本地化。该语言不反映默认的resx文件

如何使用 DevExpress WinForms TextEdit 作为密码输入(带星号)?

带有 MimeKit、C# Winforms 和 Google API 的 Gmail 草稿(带附件的 HTML)

在鼠标悬停时制作标签下划线

MainMenu 控件在使用 & 并按 ALT 时不显示下划线

调整相邻控件大小时调整 TableLayoutPanel 大小