vb.net - 在不同的对象中使用不同的 KeyDown 事件,但在 vb.net 中以相同的形式
问题描述
我有一个名为“button1”和“button2”的形式的 2 个按钮我的两个按钮都有以下代码:
Private Sub Button2_KeyDown(sender As Object, e As KeyEventArgs) Handles Button2.KeyDown
Select Case e.KeyData
Case (Keys.F5)
MsgBox("F5 in button 2")
Case (Keys.F6)
MsgBox("F6 in button 2")
End Select
End Sub
Private Sub Button1_KeyDown(sender As Object, e As KeyEventArgs) Handles Button1.KeyDown
If e.KeyCode.Equals(Keys.F9) Then
MsgBox("F9 in button 1")
End If
End Sub
使用此代码,我正在尝试以相同的形式从键盘上用不同的键激活两个不同的按钮。问题是当我尝试按下不同对象的不同键时,只有其中一个正在注册事件。
示例:默认情况下,我认为按钮 2 已激活,因此每次我按下 f5 和 f6 时,正确的消息显示都没有问题,但是当按下 f9 键时实际上并没有触发按钮 1 的其他事件。我必须单独单击按钮才能激活他们,然后事件正确注册。
可以同时激活两个吗?
解决方案
您编写了 2 个不同KeyDown
的事件,因此如果活动控件是 button2,则 F5 和 F6 将起作用。如果活动控件是 button1,F9 将。
将表单的KeyPreview
属性设置为true
并为表单创建另一个 KeyDown 事件,如下所示:
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Form1.KeyDown
If e.KeyCode.Equals(Keys.F9) Then
Button1_KeyDown(Me, e)
End If
Select Case e.KeyData
Case (Keys.F5)
Button2_KeyDown(Me, e)
Case (Keys.F6)
Button2_KeyDown(Me, e)
End Select
End Sub
拥有KeyPreview = True
KeyDown 仅适用于表单而不适用于按钮,您可以从那里调用所需的事件。
推荐阅读
- selenium - 从在线购物网站复制订单号
- tsql - 如果只有一个零值,则按供应商分组并显示零,如果没有零,则平均所有值
- sql - H2 将日期转换为毫秒
- python - 无法使用 minimummodbus 与 Modbus 设备通信
- spring - 使用 @SortDefault 和 @PageableDefault 进行 mockMvc jUnit 测试
- linux-kernel - 用 bbappend 替换 mosquitto.conf 文件?
- javascript - React Native 中的图像组件中的缓存问题
- scala - 将数据框列转换为类似列的 onehotencoder
- apache-spark - textFile 函数分区在从本地文件系统读取目录时的行为
- excel - 在 vba 中导出为 pdf 时,如何将我的数据放在一张纸上?