2

我有一个带有选项卡控件的 Windows 应用程序。tabcontrol 的选项卡之一有一个 webbrowser 控件。现在我面临的问题是当焦点在 webbrowser 控件内时,tabcontrol的正常Ctrl+功能不起作用。我希望+更改选定的选项卡tabcontrol 即使焦点在选定选项卡中的 webbrowser 控件内。如何实现这一点?TabCtrlTab

我已经尝试过覆盖 ProcessCmdKey.但是当焦点在 webbrowser 控件内时它不会被击中。

我也尝试了 registerhotkey 方法,它有效,但它锁定了我的应用程序中的Ctrl+Tab热键,并且系统在应用程序运行时不响应我的应用程序之外的任何其他Ctrl+Tab按键,这是 registerhotkey 的预期行为。

4

1 回答 1

0

这是您需要的代码:

    If WB.ContainsFocus Then
        MsgBox("We have focus, disappearing...")
        WB.Document.Body.RemoveFocus()
    End If

现在,问题是,何时运行该代码。如果将它放在 WebBrowser1_GotFocus 事件中,则需要打开和关闭它。如果用户正在与 WB Control 交互,请关闭代码,并在他们没有交互以及您预计会遇到您提到的问题时重新打开它。

当然,您可以添加另一行以确保在您从正文中移除焦点后,特定控件/选项卡/面板等获得焦点。此外,这里还有 3 个其他 SO 问题的答案可能对您有所帮助,但这些问题将带您走向与我提供的方向不同的方向,可能是因为这些问题与您的问题不同,但足够相似有用(未按优先顺序列出)。

防止 WebBrowser 控件窃取焦点?

网络浏览器抢了焦点

在 C# 应用程序中聚焦 WebBrowser 控件

更新:我只是想添加,而不是 .Body.RemoveFocus() 你可以这样做:

WB.Document.Body.Parent.RemoveFocus()

我更喜欢哪个,因为 .Document 对象在智能感知上没有明确的 .RemoveFocus 方法,所以我在 VS2012 RC 中得到了启发。这可能是指 HTML 标记(而不是 .Document 对象),并且由于html标记是标记的唯一父body级,因此这是有道理的,并且在对象下的智能感知中没有直接可用的“HTML”对象,因为您可以通过其他方式获得,所以这样做更方便。

干杯,如果您需要更多信息,请告诉我。

于 2012-10-02T03:00:23.480 回答