0

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

4

1 回答 1

2

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

我不确定您的要求是什么,但是在您的问题中发布代码将有助于我们给出准确的答案。

以下我假设我猜测您所问的内容与以下示例相关:

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

看来您想要一个可以同时处理 Click 和 Keypresses 的子例程。

以下子例程“e_Handler”将接受MouseEventArgs, KeyEventArgs, 并KeyPressEventArgs通过检查事件类型并将其转换为变量,然后您可以在其中测试或使用相应的结果状态:

' 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是避免编译器“隐式转换”警告,并确保如果您将项目设置为使用Option Strict进行编译,该方法不会抛出和异常

于 2013-08-18T04:15:00.703 回答