Winforms MenuStrip Подчеркнутая горячая клавиша - PullRequest
6 голосов
/ 06 мая 2009

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

Ответы [ 4 ]

14 голосов
/ 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();
}

Хочу отметить, что если вы предпочитаете рендеринг в стиле System, вы можете расширить класс ToolStripSystemRenderer вместо Professional, но мне нравится возможность настраивать таблицу цветов. Это исправление, которое не требует от клиента изменения настроек своего компьютера. Наслаждайтесь!

9 голосов
/ 06 мая 2009

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

  1. Щелкните правой кнопкой мыши на рабочем столе
  2. Выберите «Свойства»
  3. Нажмите на вкладку «Внешний вид»
  4. Нажмите кнопку «Эффекты»
  5. Снимите флажок «Скрыть подчеркнутые буквы для навигации по клавиатуре»
8 голосов
/ 06 мая 2009

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

0 голосов
/ 09 октября 2015

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

[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, и почти все ответы на эту тему должны изменить настройки рабочего стола или кратко "зачем вам это делать?" ответ. Это не самое безумное требование, которое я слышал.

...