Winforms MenuStrip Подчеркнутая буква горячей клавиши

Обычно буквы горячих клавиш в MenuStrip подчеркнуты. (&File, &Open и т. д.) Над проектом, над которым я работаю, подчеркивание отображается в дизайнере, но не во время выполнения. Я не могу найти свойство, которое управляет этим. Кто-нибудь там знает?


person Jeff    schedule 06.05.2009    source источник
comment
Они появляются, когда вы нажимаете клавишу Alt?   -  person Tim Robinson    schedule 06.05.2009


Ответы (4)


В Windows есть настройка, показывать ли подчеркивание. Чтобы изменить настройку,

  1. Щелкните правой кнопкой мыши на рабочем столе
  2. Выберите «Свойства»
  3. Нажмите на вкладку «Внешний вид»
  4. Нажмите кнопку «Эффекты»
  5. Снимите флажок «Скрыть подчеркнутые буквы для навигации с помощью клавиатуры».
person Chris Thompson    schedule 06.05.2009
comment
Хороший. Я знал, что эта настройка где-то есть, но помни, как к ней добраться. - person Crispy; 06.05.2009
comment
Спасибо, это было. Чувствую себя глупо, задавая вопрос сейчас. :-) - person Jeff; 06.05.2009
comment
Я имею в виду, это действительно решает проблему? Любой пользователь, получивший ваше приложение, должен будет либо вручную изменить этот параметр, либо вам нужно будет добавить что-то в приложение установки, чтобы изменить этот параметр автоматически. - person Mark; 07.05.2009
comment
Пожалуйста, проверьте мой пост ниже для лучшего решения - person Cris McLaughlin; 08.08.2009

Вы можете заставить пользователя видеть подчеркивание, создав собственный модуль визуализации 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, но мне нравится возможность настраивать таблицу цветов. Это исправление, которое не требует от клиента изменения настроек своего компьютера. Наслаждаться!

person Cris McLaughlin    schedule 08.08.2009
comment
Спасибо, Крис, вы предоставили именно то, что я искал. - person alfred barthand; 03.11.2009
comment
Будет ли работать что-то подобное, но применительно к командным кнопкам (которые также могут иметь горячую клавишу) ?? - person Diego; 15.10.2010
comment
Отличное решение. В ToolStripProfressionalRenderer есть небольшая опечатка. Это должен быть ToolStripProfessionalRenderer. - person coolmine; 27.06.2013

Они будут отображаться только во время выполнения, когда пользователь нажимает клавишу alt. Когда вы нажимаете клавишу alt, форма думает, что вы, возможно, захотите использовать один из ярлыков, поэтому она отображает любое подчеркивание.

person Mark    schedule 06.05.2009

Для последующего вопроса, связанного с этим, а именно, заставить это работать для всех горячих клавиш ваших приложений:

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

Вызовите GetAltKeyFixed перед Application.Run или эквивалентным.

Мне это нужно для соответствия 508, и почти все ответы на эту тему касаются изменения настроек рабочего стола или краткого «зачем вам это делать?» отклик. Это не самое безумное требование, которое я слышал.

person John VandenBrook    schedule 08.10.2015