我正在尝试创建一个处理输入和点击的按钮。我已经设置了我的子程序来处理键盘和鼠标点击,但是我无法从EventrArs访问MouseEventArgs,也无法从System.EventArgs访问KeyEventArgs。我怎么能这样做?
答案 0 :(得分: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
是为了避免编译器“隐式转换”警告,并确保如果将项目设置为使用选项严格