C #: Как подавить UserControl, чтобы сосредоточиться на первом дочернем элементе управления? - PullRequest
3 голосов
/ 25 января 2011

У меня есть UserControl, который может иметь childcontrol.

Пользовательский контроль имеет стили:

this.SetStyle(
            ControlStyles.AllPaintingInWmPaint |
            ControlStyles.OptimizedDoubleBuffer |
            ControlStyles.Selectable |
            ControlStyles.SupportsTransparentBackColor |
            ControlStyles.UserPaint,
            true);

Теперь, если я нажимаю на элемент управления пользователя (не дочерний элемент управления), я хочу, чтобы элемент управления пользователя сохранял фокус, но фокус автоматически переходит к первому элементу управления дочерним элементом. То же самое происходит, если я использую клавишу табуляции.

Я уже пытался переопределить OnGotFocus, но безуспешно.

Есть идеи?

1 Ответ

3 голосов
/ 25 января 2011

Это жестко запрограммированное поведение внутри класса UserControl, оно перехватывает сообщение WM_SETFOCUS и передает фокус дочернему элементу управления. Я не знаю, как это переопределить, даже перехват в WndProc () не работает, поскольку нет хорошего способа заставить базовый класс UC справиться с этим.

Лучший подход состоит в том, чтобы избежать битвы и использовать закрепленный элемент управления Panel для замены событий, которые вы хотите, чтобы UC обрабатывал. Это также требует некоторого взлома, Panel также является контейнерным элементом управления, но это можно обойти. Проверьте мой ответ здесь для фокусируемой панели.

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