在 WinForms WebBrowser 控件中抑制/拦截 Alt+Left/Alt+Right

问题描述

我们有一个在窗体上带有 WebBrowser 控件的 WinForms 应用程序(当前正在为经典的 .NET Framework 4.7.2 编译它)。当此 Webbrowser 控件具有输入焦点以实现我们自己的历史导航时,我们需要抑制或拦截 Alt+Left 和 Alt+Right 键盘组合。我们尝试了多种方法包括覆盖控件或整个表单的 Control.ProcessCmdKey(),但这无济于事。如何在 C# 或 VB.NET 中的 .NET Framework 中做我们需要的?

解决方法

虽然您无法订阅 WebBrowser KeyDown、KeyUp 或 KeyPress 事件而不会出现运行时错误,但您可以订阅 WebBrowser.PreviewKeyDown Event 以检测 Alt-Left ArrowAlt -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