KeyEventArgs和MouseEventArgs

时间:2013-08-18 02:13:04

标签: vb.net button onclick enter eventargs

我正在尝试创建一个处理输入和点击的按钮。我已经设置了我的子程序来处理键盘和鼠标点击,但是我无法从EventrArs访问MouseEventArgs,也无法从System.EventArgs访问KeyEventArgs。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

虽然您的问题并不完全清楚,但听起来您正试图“从”System.EventArgs键入键盘事件?

我不确定你的要求,但是在你的问题上发布代码可以帮助我们提供准确的答案。

以下我假设我猜你所问的与以下样本有关:

EventArgs是一种类型,它也是所有事件的基本类型。

似乎你想要一个可以一次处理Click和Keypresses的子程序。

以下子例程'e_Handler'将接受MouseEventArgsKeyEventArgsKeyPressEventArgs,方法是检查事件类型并将其转换为变量,然后您可以在其中测试或使用结果状态相应。:

' Handler for 3 event types:

Sub e_Handler(Sender As Object, E As EventArgs)

    If TypeOf E Is MouseEventArgs Then
        Dim K As MouseEventArgs = CTypeDynamic(Of MouseEventArgs)(E)

        MsgBox("Clicked Mouse at position " & K.Location.ToString & " on " & Sender.ToString)
    End If

    If TypeOf E Is KeyPressEventArgs Then
        Dim K As KeyPressEventArgs = CTypeDynamic(Of KeyPressEventArgs)(E)

        MsgBox("Pressed the key " & K.KeyChar & " on " & Sender.ToString)
    End If

    If TypeOf E Is KeyEventArgs Then
        Dim K As KeyEventArgs = CTypeDynamic(Of KeyEventArgs)(E)

        MsgBox("Pressed the key " & K.KeyCode & " on " & Sender.ToString)
    End If

    Me.Text = E.ToString

End Sub

然后,您可以将此例程作为任意数量的事件和控件的处理程序:

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    AddHandler Me.MouseClick, AddressOf e_Handler
    AddHandler Me.KeyPress, AddressOf e_Handler
    AddHandler Me.KeyDown, AddressOf e_Handler


    For Each C As Control In Me.Controls
        AddHandler C.MouseClick, AddressOf e_Handler
        AddHandler C.KeyDown, AddressOf e_Handler
        AddHandler C.KeyPress, AddressOf e_Handler
    Next
End Sub

编辑:

使用CTypeDynamic是为了避免编译器“隐式转换”警告,并确保如果将项目设置为使用选项严格

进行编译,则方法不会抛出异常