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