2013-11-17 3 views
1

im программирование формы, которая перемещает изображение влево или вправо на определенное расстояние на основе клавиш со стрелками. Я знаю, что форма нуждается в KeyPreveiw = True и устанавливается соответствующим образом. мой код:Форма, не читающая стрелку в событии keydown

В этом блоке WASD работает соответственно, однако стрелки LRUD вообще не срабатывают. Я попытался с помощью:

Msgbox(e.keycode.tostring()) 

, чтобы показать, если они были стреляя, другие кнопки работали (123, ABC, и т.д.), стрелка, однако, не сделала. Моя догадка о проблеме заключается в том, что у меня есть кнопки в форме, и они принимают клавиши для себя (приоритет над формой). На моей форме у меня есть 3 кнопки, когда я нажимаю, давайте скажем стрелку вниз, я вижу, что каждая кнопка подсвечивается через три. Как я могу исправить эту проблему? Заранее спасибо!

EDIT: После удаления кнопки код работает. Мне нужно, чтобы выяснить, как сделать приоритет формы тейк на кнопку, если это возможно :)

+0

возможно дубликат [события KeyDown не стрельбы с .NET WinForms?] (http://stackoverflow.com/questions/1608611/keydown-event-not-firing-with-net-winforms) –

ответ

3

Override ProcessCmdKey() для вашей формы, как это:

Public Class Form1 

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean 
     Select Case keyData 
      Case Keys.Up 
       Debug.Print("Up") 
       Return True ' <-- If you want to suppress default handling of arrow keys 

      Case Keys.Right 
       Debug.Print("Right") 
       Return True ' <-- If you want to suppress default handling of arrow keys 

      Case Keys.Down 
       Debug.Print("Down") 
       Return True ' <-- If you want to suppress default handling of arrow keys 

      Case Keys.Left 
       Debug.Print("Left") 
       Return True ' <-- If you want to suppress default handling of arrow keys 

     End Select 
     Return MyBase.ProcessCmdKey(msg, keyData) 
    End Function 

End Class 
Смежные вопросы