如何将keyUp / keyDown事件传递给visual basic中的面板?

时间:2015-01-11 21:17:39

标签: vb.net winforms events

我已经在visual basic中创建了一款游戏,并决定通过在游戏中添加多个房间进行扩展。每个房间都是一个面板,显示用户何时进入某个区域。首先,我创建了一个继承面板属性的类,然后将其添加到我的主窗体中。然后我将所有项目添加到面板控件中。我的问题是,当它在面板控件中时,我无法控制播放器。我尝试了各种各样的方法,但无法让它发挥作用。

我做了一些阅读,发现该面板没有keyUp()和keyDown()事件。但是,我想知道是否有办法解决这个问题。

提前致谢!

mainRoom()类的代码(我的面板):

Public Class mainRoom
    Inherits Panel

    Sub New()
        With Me
            .SetBounds(0, 0, Form1.Width, Form1.Height)
            .SendToBack()
        End With
    End Sub

    Public Sub mainRoom_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
        e.Graphics.FillRectangle(Brushes.DarkOrange, block)
    End Sub
End Class

在主要表格类中:

Sub setMap()
    main = New mainRoom()
    Me.Controls.Add(main)
End Sub

2 个答案:

答案 0 :(得分:2)

您可以在主窗体上设置KeyPreview=True,然后从表单处理键上/下事件:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
End Sub

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    'key down code.
    e.Handled = True
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    'key up code.
    e.Handled = True
End Sub

注意:如果您不想要其他控件'在表单事件处理程序执行后触发的键上/下事件处理程序,然后像上面的示例中那样设置e.Handled=True

有关KeyPreview的更多信息,请参阅MSDN

答案 1 :(得分:0)

注意 - 当通过IDE将现有控件从表单移动(剪切/粘贴)到新的面板控件时,事件处理程序不会成为父控件(新面板)的子项。所以这发生了:

    Private Sub Button1_Click(sender As Object, e As EventArgs)

添加事件处理程序,不要花时间谷歌搜索为什么按键事件突然停止在面板中停止...

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click