Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Winforms MenuStrip Underlined Hotkey Letter

Typically the hotkey letters on a MenuStrip are underlined. (&File, &Open, etc) On a project I'm working on the underline shows up in the designer, but not at run time. I can't find the property that controls this. Anyone out there know?

like image 927
Jeff Avatar asked May 06 '09 15:05

Jeff


2 Answers

You can force the user to see the underline by creating a custom ToolStrip renderer. It took me quite a while to figure out how to bypass Chris's answer. Here is the renderer I created:

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);
        }
    }
}

And then in the Form with the MenuStrip, in the constructor you set the renderer:

public YourFormConstructor()
{
    InitializeComponents();
    menuStripName.Renderer = new CustomMenuStripRenderer();
}

I would like to note that if you prefer a System style look of renderering you can extend the ToolStripSystemRenderer class instead of the Professional but I like being able to customize the color table. This is the fix that doesn't require the client to change his computer settings. Enjoy!

like image 82
Cris McLaughlin Avatar answered Nov 22 '22 18:11

Cris McLaughlin


In Windows, there is a setting whether or not to show the underline. To change the setting,

  1. Right click on the desktop
  2. Select "Properties"
  3. Click on the "Appearance" tab
  4. Click the "Effects" button
  5. Uncheck the box labeled "Hide underlined letters for keyboard navigation"
like image 27
Chris Thompson Avatar answered Nov 22 '22 20:11

Chris Thompson