ToolStripMenuItem не в видимой области, когда выделено / выделено - PullRequest
4 голосов
/ 21 ноября 2008

У меня есть ContextMenuStrip, который содержит подменю динамически генерируемых ToolStripMenuItems. Есть до 80 пунктов подменю. Нажатие на первую букву нужного пункта меню выбирает его правильно, но если элемент оказывается вне видимого диапазона (в диапазоне, обработанном стрелками прокрутки), он не отображается - пользователь должен нажать стрелку вверх а затем стрелку вниз для отображения и фокусировки требуемой опции на экране.

Например, у меня есть 6 пунктов, начинающихся с "m", но видны только 3.5. Я нажимаю m один, и первый элемент выделяется, я нажимаю m 3 еще раз, и я вижу половину выбранной строки (она находится внизу видимой области), нажимаю m еще два раза, и я не вижу выбор строка, затем m еще раз, и первая запись m видна и снова выбрана.

По умолчанию ToolStripMenuItems (TSMI) не имеют ключевых прослушивателей, однако, если я подклассирую TSMI, я могу перехватить ProcessDialogKey и ProcessCmdKey и вручную выбрать правильный вариант, но я не могу прокрутить подменю toolstrip вниз, чтобы убедиться, опция видна.

Любые советы о том, как:

a) прокрутка подменю панели инструментов

или

b) позволяет подменю использовать несколько столбцов (и надеюсь, что у пользователя нет смехотворно низкого разрешения).

Ответы [ 2 ]

0 голосов
/ 10 декабря 2008

Я столкнулся с этой проблемой. Я не помню точное решение (дайте мне знать, если вы не можете его найти), но, по сути, ToolStripMenu имеет свойство для «индекса самого верхнего элемента».

Просто установите недавно выбранный элемент (например, 4-й «m») в качестве индекса самого верхнего элемента, а WinForms будет обрабатывать все остальное.

Удачи!

0 голосов
/ 21 ноября 2008

Вы пробовали событие KeyPress на ContextMenuStrip? Возможно, вы сможете обнаружить нажатие клавиши, которая изменяет выбранный элемент, а затем использовать свойство ToolStripMenuItem.Selected для каждого элемента, чтобы определить, какой из них выбран. Затем используйте AutoScrollOffset на ContextMenuStrip для прокрутки элемента в поле зрения.

Или, вместо этого, вы можете использовать старый элемент управления ContextMenu - его элементы имеют событие Select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...