Я пытаюсь реализовать всплывающее окно завершения кода в своем проекте. Окно является производным от Form. Он содержит два элемента управления: пользовательский список, полученный из UserControl (он показывает возможности завершения с помощью значков) и VScrollBar.
Когда всплывающее окно появляется, оно не крадет фокус у редактора (ShowWithoutActivation формы переопределяется, чтобы вернуть значение true), и редактор отправляет всплывающему окну определенные нажатия клавиш, чтобы пользователь мог взаимодействовать с ним с помощью клавиатуры. Пока это работает как шарм.
Проблема в том, что я хочу разрешить пользователю использовать мышь. Но когда пользователь щелкает всплывающее окно, его форма активируется и крадет фокус у редактора. Я могу отреагировать на это, вернув фокус редактору, я даже установил таймер, чтобы делать это регулярно, но помимо того, что это плохое решение, строка заголовка редактора всегда мерцает, когда это происходит (когда всплывающее окно щелкнул).
Есть ли способ взаимодействовать с всплывающей формой (с помощью мыши), который не активирует форму?
Документация ShowWithoutActivation гласит: «Если вашему неактивированному окну необходимо использовать элементы управления пользовательского интерфейса, вам следует рассмотреть возможность использования элементов управления ToolStrip, таких как ToolStripDropDown. Эти элементы управления не содержат окон и не вызывают активацию окна при их выборе». Это похоже на то, что мне нужно, но я хочу использовать настраиваемый элемент управления и полосу прокрутки.
Та же проблема будет с всплывающей подсказкой, которая показывает эти две стрелки для переключения перегрузок методов (известных из VS) - вся форма вообще не будет использовать элементы управления (только отображать текст и стрелки), но при нажатии она не должна активироваться . Проблема может быть сведена к «Как создать форму, которая никогда не будет активироваться, но позволит пользователю взаимодействовать с определенными элементами управления внутри?».
Спасибо.