Однако, если положить на форму такие компоненты как Button, ListBox, ListView, TreeView, TextBox (возможно, ещё какие-то), то событие тупо не приходит, потому что форма перестаёт принимать фокус.
Но когда я нажимаю клавишу вверх, то фокус переходит в ListBox (где тут логика???) и в результате ListBox и форма начинают принимать одни и те же сообщения (события) от клавиатуры.
Где написано, что при нажатии вверх фокус должен переходить на ListBoxListViewEditBox (смотря что лежит) и как это выключить?
Не, == вроде правильно Если ни один контрол не активен, то ставим true.
Но почему при нажатии вверх условие не выполняется?
Видимо, нажатие вверх активирует ListBox еще до прихода KeyDown в форму Но почему и как это выключить?
Я понял. Когда нажимаешь стрелки первый раз , то событие KeyDown вообще не приходит, но зато активируется ListBox (но это зависит от того, какую стрелку нажал и какой индекс стоял у ListBox). А потом, когда ListBox уже стал активен, форма начинает реагировать на стрелки. Но и индекс в ListBox меняется.
Это баг или фича? Если фича, то нафига? Если баг, то почему бы его не пофиксить?
Мне надо обрабатывать нажатия только если ни один контрол не активен. Конечно, можно, наверное, при каждом нажатии как-то перебрать все контролы и проверить их активность. Но это опять костыли костыли костыли.
Да и при том, при нажатии на стрелки фокус всё-равно куда-то уходит, так что, не помогло бы.
Еще не пробовал, но в чём тут магия? Почему так контролы не будут активироваться при нажатии стрелок?
Проверил - абсолютно то же самое. Нажимаю на стрелки и ListBox активируется. Зачем это сделано и как отключить?
И, кстати, по ссылке там совершенно другая проблема, с данной темой никак не связанная.
Или имелось ввиду создать наследников от ListBox / Button и этот код туда вставить? Но похоже, что нет.