【发布时间】:2013-08-20 03:25:58
【问题描述】:
我正在尝试制作一个同时处理输入和点击的按钮。我已经设置了我的子过程来处理按键和鼠标点击,但是我无法从 EventrArs 访问 MouseEventArgs,也无法从 System.EventArgs 访问 KeyEventArgs。我该怎么做?
【问题讨论】:
-
你不能那样做。告诉我们你为什么这样做。
标签: vb.net button onclick enter eventargs
我正在尝试制作一个同时处理输入和点击的按钮。我已经设置了我的子过程来处理按键和鼠标点击,但是我无法从 EventrArs 访问 MouseEventArgs,也无法从 System.EventArgs 访问 KeyEventArgs。我该怎么做?
【问题讨论】:
标签: vb.net button onclick enter eventargs
虽然您的问题不是很清楚,但听起来您正在尝试“来自”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 的使用是为了避免编译器“隐式转换”警告,并确保如果您将项目设置为使用 Option Strict
【讨论】:
Me.AcceptButton 属性以不同的方式解决了这个问题。