Получение клавиш со стрелками влево и вправо для выбора предыдущего / следующего меню вместо следующего / предыдущего меню
Замечено в полном приложении, но полностью воспроизводимо в простой демонстрации:
у меня есть MenuStrip
содержит три меню, A
, B
, а также C
, Каждое из этих меню содержит три элемента, A1
/A2
/.../C2
/C3
,
Когда я нажимаю Alt, первое меню A
становится выбранным. Затем я могу использовать клавиши ← и → для выбора других меню. Так и должно быть.
Однако, когда я нажимаю ↓, чтобы открыть меню, я все еще могу использовать ← и →, чтобы выбрать другие меню, но порядок меняется на противоположный: ← выбирает следующее меню и → предыдущее.
У меня проблемы с выяснением, если что-то не так с моей локальной системой, если это ошибка в MenuStrip
компонент, или если я забыл установить обязательное свойство. Все три мне кажутся странными, потому что во всех трех случаях я ожидал, что кто-то уже сталкивался с этой проблемой, и я даже не могу найти кого-то еще, кто спрашивал бы об этом.
Если не понятно, о чем я спрашиваю, вот изображение:
http://i42.tinypic.com/25uis8m.png
И прежде чем я забуду упомянуть, не существует соответствующего кода. Это демонстрационное приложение представляет собой совершенно новый проект WinForms, имеет один MenuStrip
Элемент управления добавлен в форму по умолчанию и имеет три меню по три элемента в каждом, для каждого из которых я установил только текст.
1 ответ
Это ошибка / несоответствие в MenuStrip
,
Глядя на ToolStripDropDown.ProcessArrowKey
Реализация с помощью Reflector показывает, что клавиши со стрелками меняются местами в зависимости от SystemInformation.RightAlignedMenus
, Это не правильно. Это должно зависеть от режима справа налево самой полосы меню, которая может иногда (обычно?) Соответствовать SystemInformation.RightAlignedMenus
, но не всегда и не в моей системе.
SystemInformation.RightAlignedMenus
настраивается пользователем через Панель управления, Настройки планшетного ПК, Другое, Рука, и действительно, если я изменю это на Левша, я получаю меню, чтобы вести себя правильно. По умолчанию и правильной настройкой для меня является правша. Так как MenuStrip
Компонент просто не пригоден для использования на клавиатуре в моей системе, я заменю его использование стандартным MainMenu
составная часть.
Обновление: я на самом деле использую производный элемент управления, чтобы иметь возможность предоставлять хорошие изображения меню. Он основан на образце Microsoft "Visual Style Menus". Более полнофункциональная реализация, которая также работает в Windows XP и более ранних версиях (в этом случае с использованием меню, нарисованного владельцем), доступна в меню Vista с иконками в C#, но это сложнее, чем мне нужно.