Есть ли способ заставить всегда показывать мнемонику в меню?

Я использую ContextMenuStrip в своей программе, и, по-видимому, он не будет отображать свои сочетания клавиш (мнемоники, те, которые должны отображаться в виде подчеркивания под буквами, которым предшествует &), если я не нажму Alt, но когда я нажму Alt, показанный ContextMenuStrip скроется потому что основное меню формы получит фокус. Таким образом, в контекстных меню мнемоника никогда не встречается!

Есть ли способ заставить это поведение быть включенным для моей программы? Я где-то читал, что вы можете изменить это где-то в системных настройках, но мне нужно, чтобы люди, использующие мое программное обеспечение, всегда видели мнемонику, а не требовали от них глобального изменения своих систем, чтобы моя программа работала правильно!

Я должен показать это меню с помощью кода в обработчике событий KeyDown, когда пользователь нажимает Enter, потому что это всплывающее окно для быстрого редактирования значения, представленного элементом управления. Пользователь щелкает элемент управления и может быстро изменить его содержимое. Подумайте об этом, как в C#, когда у вас есть всплывающее окно, которое появляется при нажатии ctrl+space, намекая на возможные фрагменты кода, которые вы можете вставить именно в это место. Таким образом, использование его в качестве свойства «контекстного меню» элемента управления или использование кнопки «показать контекстное меню» на клавиатуре не применяется.

Спасибо!


person Istrebitel    schedule 15.04.2012    source источник
comment
Вот как это должно работать. Если у вас есть мнемоника в верхнем меню и вы нажимаете Alt (клавиша для этого меню), ваши мнемоники также будут отображаться в подменю.   -  person Patrick    schedule 15.04.2012
comment
Мнемоники появляются при активации меню с помощью клавиатуры. Для этого используйте Shift+F10, мы используем специальную клавишу контекстного меню на вашей клавиатуре, если она есть.   -  person Rob Kennedy    schedule 15.04.2012
comment
возможно, вы думаете о свойстве для сочетаний клавиш, которое вы можете найти в окне свойств как часть дизайнера. Это даст вам больше возможностей (например, Shift и/или Ctrl и т. д.).   -  person coder    schedule 15.04.2012
comment
Да, но, к сожалению, это не подменю, а контекстное меню, оно отображается вызовом CMS.Show() внутри обработчика события Click() объекта. Если я нажимаю Alt, контекстное меню сразу скрывается.   -  person Istrebitel    schedule 16.04.2012
comment
Ну вот и все. Вы отображаете меню в результате щелчка мыши. Конечно, символы ускорителя не будут отображаться. Они не предназначены; пользователь использует мышь, а не клавиатуру, поэтому нет необходимости видеть сочетания клавиш. Вместо этого показывать меню в ответ на сообщение wm_ContextMenu. Это сработает для Shift+F10, щелчка правой кнопкой мыши и клавиши контекстного меню.   -  person Rob Kennedy    schedule 16.04.2012
comment
Ну, я показываю это и по клику, и по Enter (когда фокус находится на элементе управления, показывающем меню) - это не имеет значения. Что вы имеете в виду под ответом? Мне нужно, чтобы меню показывалось при входе, потому что это проще, чем нажимать Shift+F10.   -  person Istrebitel    schedule 16.04.2012


Ответы (2)


Это настройка операционной системы:

Панель управления\Все элементы панели управления\Центр специальных возможностей\Упрощение использования клавиатуры\Упрощение использования сочетаний клавиш\Подчеркивание сочетаний клавиш и клавиш быстрого доступа.

person Steve Wellens    schedule 15.04.2012
comment
Да, я знаю, я думал, может быть, есть способ переопределить это в моем программном обеспечении. - person Istrebitel; 16.04.2012

Измените способ вызова контекстного меню. Не показывайте его вручную, вместо этого используйте что-то вроде:

textBoxSomething.ContextMenuStrip = yourContextMenuStrip;

В этом случае, если пользователь щелкнет правой кнопкой мыши по текстовому полю (или другому используемому вами элементу управления), он получит меню без мнемоники. Но если он использует кнопку контекстного меню на клавиатуре, чтобы показать контекстное меню, мнемоника будет показана.

person Arek    schedule 15.04.2012
comment
К сожалению, это невозможно (мне нужно открывать меню вручную), но даже если бы это было возможно, скажите, пожалуйста, как мне установить кнопку контекстного меню? когда я назначаю CMS для свойства объекта, он открывается для меня только при щелчке правой кнопкой мыши - person Istrebitel; 16.04.2012
comment
Не уверен, правильно ли я вас понял. Кнопка контекстного меню — это кнопка на клавиатуре для отображения контекстного меню. Одна из специальных кнопок Win. Не нужно ничего назначать. Очевидно, что это не решает проблему, когда один щелчок правой кнопкой мыши, но хочет выбрать команду с помощью клавиатуры. - person Arek; 16.04.2012
comment
Ах я вижу. Нет, я использую контекстное меню в качестве всплывающего редактора, так что эта кнопка не поможет. Моя программа (часть ее) редактирует операторы, такие как переменная, равная значению, и пользователь щелкает или выбирает и нажимает равно, и появляется меню со всеми возможными опциями, такими как больше и не равно, и пользователь выбирает. Итак, мне нужно показать его при нажатии или вводе, а не на кнопке контекстного меню, которая присутствует на клавиатуре. - person Istrebitel; 17.04.2012