gpt4 book ai didi

.net - PreviewKeyDown 未触发

转载 作者:行者123 更新时间:2023-12-04 17:35:57 26 4
gpt4 key购买 nike

我的表单不会触发 PreviewKeyDown无论。 KeyPreview属性已设置为 True .

Private Sub frmMain_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles MyBase.PreviewKeyDown
'Code never hits this line
End Sub

最佳答案

Winforms 并没有完全幸运地必须提供与 VB6 的某种程度的向后兼容性,VB6 是 .NET 出现之前的主要 GUI 开发工具。 KeyPreview 是一种反向兼容的属性,VB6 也具有该属性。在 VB6 中,它是实现快捷键的唯一方法,它在引发具有焦点的控件上的 KeyDown 事件之前引发窗体的 KeyDown 事件。不是 PreviewKeyDown。

它还有一些 VB6 的怪癖,KeyDown 不会针对 Tab、箭头键和 Enter 和 Escape 等导航键升起。这就是 Winforms 特定的 PreviewKeyDown 事件的全部内容,您可以在执行导航操作之前嗅探这样的键。但仅在具有焦点的控件上,当它有任何控件时,它永远不会是窗体。

最好放弃这种向后兼容功能并使用 Winforms 对键盘处理的特定支持,从而减少意外。实现快捷键的最好方法是覆盖表单的 ProcessCmdKey() 方法,它无条件地运行,无论表单的键或状态如何:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
If keyData = Keys.F1 Then
'' Show help
''...
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function

关于.net - PreviewKeyDown 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18930318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com