【问题标题】:Suppress/Intercept Alt+Left/Alt+Right in WinForms WebBrowser Control在 WinForms WebBrowser 控件中抑制/拦截 Alt+Left/Alt+Right
【发布时间】:2021-08-04 15:25:30
【问题描述】:
我们有一个带有WebBrowser 控件的 WinForms 应用程序(目前正在为经典的 .NET Framework 4.7.2 编译它)。当这个 WebBrowser 控件具有输入焦点来实现我们自己的历史导航时,我们需要抑制或拦截 Alt+Left 和 Alt+Right 键盘组合。我们尝试了几种方法,包括为控件或整个表单覆盖Control.ProcessCmdKey(),但这无济于事。如何用 C# 或 VB.NET 在 .NET Framework 中做我们需要的工作?
【问题讨论】:
标签:
.net
winforms
keyboard-shortcuts
webbrowser-control
intercept
【解决方案1】:
虽然您无法订阅 WebBrowser KeyDown、KeyUp 或 KeyPress 事件而不会出现运行时错误,但您可以订阅 WebBrowser.PreviewKeyDown Event 以检测 Alt-Left Arrow 和 Alt-RightArrow 组合键。
如果您在事件处理程序中将 PreviewKeyDownEventArgs.IsInputKey Property 设置为 true,则 WebBrowser 控件不会将该组合解释为 WebBrowser.GoBack/WebBrowser.GoFoward 命令。
Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown
If e.KeyData = (Keys.Left Or Keys.Alt) OrElse e.KeyData = (Keys.Right Or Keys.Alt) Then
' setting IsInputKey = true prevents the Browser for processing
' Alt-Left Arrow and Alt-Right Arrow as history navigation
e.IsInputKey = True
End If
End Sub
【讨论】:
-
是的,这有帮助!!即使没有将e.IsInputKey 设置为True,在调用base.OnPreviewKeyDown(e) 之前覆盖OnPreviewKeyDown() 并为Alt+Left/Right 执行我们的自定义操作就足够了。我还必须提到,我们的 WebBrowser 控件后代的 WebBrowserShortcutsEnabled 属性设置为 False。