我试着做一个按钮,处理进入和点击。我已经设置了我的子过程来处理键盘和鼠标点击,但是我不能从EventrArs访问EventrArs,也不能从System.EventArgs访问KeyEventArgs。我怎么能这样做?
发布于 2013-08-18 04:15:00
虽然你的问题还不太清楚,但听起来你是在尝试从“System.EventArgs?”中输入键盘事件吗?
我不太清楚你在问什么,但贴上你的问题代码会帮助我们给出准确的答案。
下面我假设我在猜测您所问的内容与下面的示例有关:
EventArgs是一种类型,也是所有事件的基本类型。
似乎你想要一个子例程,可以同时处理点击和按键在一次。
下面的子例程'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是为了避免编译器“隐式转换”警告,并确保如果您将项目设置为使用选项编译时,该方法不会抛出和异常。
https://stackoverflow.com/questions/18295049
复制相似问题