vb.net - keydown 未使用按钮在 Enter 键上触发
问题描述
我正在创建一个 winforms 应用程序,我只是尝试使用一个按钮来允许用户提交表单。我有以下按钮代码
With duplicate_button
.Parent = action_box
.TabIndex = 4
.Width = 125
.Top = 25
.Left = (.Parent.Width / 2) - (.Width / 2)
AddHandler .KeyDown, AddressOf duplicate
End With
Private Sub duplicate(sender As Object, e As KeyEventArgs)
Console.Write(e.KeyCode)
End Sub
但是,当用户按下回车键时,不会调用复制函数。它确实会被键盘上的任何其他键调用,而不是输入键。但我真的只需要它为输入键工作。
我已经尝试将 previewkeys 设置为 true 并将表单上的接受按钮设置为此按钮,但它们都没有改变任何东西。
我也尝试使用 keypress 事件,但再次没有检测到 enter 键。
解决方案
当按钮具有焦点时,按下该ENTER键将引发Click
和KeyUp
事件。
如果按下该键将导致焦点到达按钮,则该TAB键将引发 KeyUp 事件,但如果按下该键将焦点移动到另一个控件则不会。
如果按下Shift+TAB将焦点移动到Button
,KeyUp
则引发两次事件。仅当按下+键将焦点移动到顺序中的上一个控件时才会引发
该事件。KeyDown
ShiftTABTabIndex
Button 具有焦点时按下的任何其他键都会引发KeyUp
和KeyDown
事件。
Form的KeyPreview
属性不会改变这种行为。
除了Shift+TAB键,用于将焦点移动到上一个控件时。
在这种情况下,仅KeyDown
引发事件。
如果 Button 是 Form 的AcceptButton或CancelButton,按ENTER或ESC键将引发Click
Button 的事件。如果还存在
多行控件,这可能会导致问题,因为按下该键不会生成新行,因为该键不会引发事件,只有.TextBox
ENTERKeyDown
KeyUp
推荐阅读
- node.js - 如何在模块中构建nodejs应用程序?
- c# - .Net 发布生成的 exe 的内容是什么?
- php - 有没有办法使用 PHP 在 UPDATE 语句中获取价值?
- powershell - Powershell 导入模块无法正常工作
- mongodb - 使用带有 upsert 的 bulkwrite 时,Mongo 的性能会下降
- python - 无法使用 LDP 身份验证提供程序对 Askbot 进行身份验证
- angular - 使用 formData 向 HTTP 发送数据时面临的问题
- ios - 以编程方式禁用键盘的 iOS QuickPath 功能
- mysql - 如何解析多个查询参数并将它们传递给 sql 命令
- python - 从动态填充的组合框中返回选定的值作为全局变量?