По сути, у меня есть форма с пользовательским элементом управления (и ничего больше).Пользовательский элемент управления полностью пуст, и для формы KeyPreview установлено значение true.
При этой настройке я не получаю никаких событий KeyDown для каких-либо клавиш со стрелками или вкладки.Все остальные клавиши на моей клавиатуре работают.У меня есть обработчики событий KeyDown, подключенные ко всему, что имеет такие события, поэтому я уверен, что ничего не пропущу.
Также следует отметить, что если я удаляю (полностью пустой) пользовательский элемент управления, я ДЕЛАЮполучить события клавиш со стрелками.
Что здесь происходит?
РЕДАКТИРОВАТЬ:
Я добавил это и в форму, и в элемент управления, но я ЕЩЕне получить клавиши со стрелками:
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x100: //WM_KEYDOWN
//this is the control's version. In the form, it's this.Text
ParentForm.Text = ((Keys)m.WParam).ToString();
break;
}
base.WndProc(ref m);
}
Я также проверил с помощью Spy ++ и определил, что сама форма не получает никаких сообщений WM_KEYDOWN, они все идут в элемент управления.Однако, тем не менее, элемент управления получает сообщения со стрелкой WM_KEYDOWN.Вздох.
Редактировать 2: Я также обновил ZIP-файл с этой версией.Пожалуйста, посмотрите на это, если вы хотите помочь ...
Редактировать 3:
Я понял это, вроде.Форма съедает клавиши со стрелками, вероятно, в попытке сохранить фокус среди своих детей.Это подтверждается тем фактом, что я получаю события, если форма пуста.
В любом случае, если я добавлю этот код в форму, я снова начну получать события:
public override bool PreProcessMessage(ref Message msg) {
switch (msg.Msg) {
case 0x100: //WM_KEYDOWN
return false;
}
return base.PreProcessMessage(ref msg);
}
Когда я переопределяю это, форма не получает возможности выполнить свою грязную работу, и поэтому я получаю события KeyDown, как и ожидалось.Я предполагаю, что побочным эффектом этого является то, что я больше не могу использовать свою клавиатуру для навигации по форме (в данном случае это не имеет большого значения, так как это игра, и вся цель этого упражнения - реализовать навигацию с помощью клавиатуры!)
До сих пор остается вопрос о том, как отключить это "правильно", если есть способ ...