Получение клавиш со стрелками влево и вправо для выбора предыдущего / следующего меню вместо следующего / предыдущего меню

Замечено в полном приложении, но полностью воспроизводимо в простой демонстрации:

у меня есть 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#, но это сложнее, чем мне нужно.

Другие вопросы по тегам