События клавиши со стрелкой, не прибывающие

В основном у меня есть форма с пользовательским элементом управления на нем (и ничто иное). Пользовательский элемент управления абсолютно пуст, и форме установили KeyPreview на истинный.

С этой установкой я не получаю событий 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);
}

Я также согласовал со Шпионом ++ и решил, что сама форма не получает сообщений 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, как я ожидаю. Я предполагаю, что побочный эффект этого состоит в том, что я больше не могу использовать свою клавиатуру для навигации по форме (не грандиозное предприятие в этом случае, поскольку это - игра, и вся цель этого осуществления состоит в том, чтобы реализовать перемещение с помощью клавиатуры!)

Вопрос все еще остается о том, как отключить это "правильно", если существует путь...

6
задан Uwe Keim 22 February 2016 в 06:11
поделиться