【问题标题】: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 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

【讨论】:

  • 是的,这有帮助!!即使没有将e.IsInputKey 设置为True,在调用base.OnPreviewKeyDown(e) 之前覆盖OnPreviewKeyDown() 并为Alt+Left/Right 执行我们的自定义操作就足够了。我还必须提到,我们的 WebBrowser 控件后代的 WebBrowserShortcutsEnabled 属性设置为 False。
猜你喜欢
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多