Vb.net KeyEventArgs和MouseeEventArgs

Vb.net KeyEventArgs和MouseeEventArgs,vb.net,button,onclick,enter,eventargs,Vb.net,Button,Onclick,Enter,Eventargs,我正在尝试制作一个按钮来处理输入和点击。我已经设置了子过程来处理按键和鼠标单击,但是我无法从EventrArs访问MouseeEventArgs,也无法从System.EventArgs访问KeyEventArgs。我怎样才能做到这一点?虽然您的问题不太清楚,但听起来您好像在试图“从”System.EventArgs键入键盘事件 我不太清楚你问的是什么,但是在你的问题上贴上代码会帮助我们给出准确的答案 以下我想我是在猜测你所问的与以下样本相关: EventArgs是一种类型,也是所有事件的基本类

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

虽然您的问题不太清楚,但听起来您好像在试图“从”
System.EventArgs
键入键盘事件

我不太清楚你问的是什么,但是在你的问题上贴上代码会帮助我们给出准确的答案

以下我想我是在猜测你所问的与以下样本相关:

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

似乎您需要一个可以一次性处理单击和按键的子例程

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

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

。告诉我们为什么要这样做。我使用
Me.AcceptButton
属性以不同的方式解决了问题。