Вопрос

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

Это было полезно?

Решение

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

<Ол>
  • Щелкните правой кнопкой мыши на рабочем столе
  • Выберите " Свойства "
  • Нажмите на " Внешний вид " Вкладка
  • Нажмите кнопку " Эффекты " Кнопка
  • Снимите флажок " Скрыть подчеркнутые буквы для навигации по клавиатуре "
  • Другие советы

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top