Как исправить странное поведение прокрутки / выравнивания при использовании клавиатуры в MenuStrip? - PullRequest
1 голос
/ 09 апреля 2010

Я начал замечать странное поведение при навигации по главной панели инструментов моего приложения Winforms, и я не знаю, как это исправить. Когда я вначале открываю раскрывающееся меню «Файл», оно выглядит так:

normal

Я начинаю прокручивать вниз каждый элемент с помощью клавиш со стрелками, и все в порядке, пока я не достигну «Выход». Как только я нажимаю клавишу со стрелкой вниз из «Log Off», или если я нажимаю клавишу со стрелкой вверх из «Open», меню перестраивается так, чтобы выглядеть следующим образом:

alt text

Я озадачен этим поведением. Меню по-прежнему работает, и с этого момента, если я начну прокручивать вверх, я смогу вернуть порядок в нормальное состояние:

alt text

Несколько замечаний:

  • Меню все еще работает.
  • Этого не происходит при использовании мыши.
  • У меня есть код, который переключает свойство Visible некоторых пунктов меню. Я мог изменить то, что было с договоренностью, поиграв с этим, но это все еще было испорчено.

Может кто-нибудь помочь мне понять, что происходит и как это исправить?

1 Ответ

2 голосов
/ 09 апреля 2010

Я нашел источник этой проблемы. Это известная ошибка , которую Microsoft явно не собирается исправлять. Проблема возникает, когда вы пытаетесь переключать видимость / доступность пунктов меню во время выполнения. Microsoft напоминает нам, что «эта проблема носит чисто визуальный характер, без потери функциональности».

Предложенный обходной путь - добавлять / удалять элементы меню, а не показывать / скрывать их.

На форумах предлагается еще один обходной путь : наследование от ToolStripDropDownMenu, отключение AutoSize, самостоятельная обработка и добавление 1 дополнительного пикселя высоты.

Я нашел сообщение в блоге , посвященное этой проблеме, но автор так и не нашел возможности опубликовать свое решение. Однако он делает полезное замечание относительно Видимого против Доступного.

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