2012-10-01 130 views
2

我有一个带有tabcontrol的Windows应用程序。 tabcontrol的一个选项卡上有一个webbrowser控件。现在我面临的问题是当焦点位于web浏览器控件的内部时,正常Ctrl + 选项卡 tabcontrol的功能不起作用。我想要Ctrl + 选项卡即使焦点位于选定选项卡中的webbrowser控件内部时也更改tabcontrol的选定选项卡。如何实现此目的?CTRL + TAB当浏览器焦点时

我已经尝试重写ProcessCmdKey.but它不会在焦点位于webbrowser控件内部时被击中。

我也试过registerhotkey方法,它的工作原理,但它锁定按Ctrl +标签热键我的应用程序&系统中,当应用程序没有任何其他按Ctrl +标签回应我的应用程序之外印刷机运行,这是registerhotkey的预期行为。

+0

如果你想禁用所有的浏览器快捷键(控制+ N,退格等),你可以设置webBrowser.WebBrowserShortcutsEnabled –

+0

谢谢Sheng.but我希望Web浏览器中的快捷键保持active.i解决了问题,通过使用热键CTRl + TAB.I当其他窗口调用CTRL + TAB并在激活的事件中再次注册时,取消注册热键。这可能不是一种理想的方法,但现在正在工作。 – user435293

+0

什么语言? –

回答

0

以下是你需要的代码:

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

现在的问题是,当运行该代码。如果你把它放在WebBrowser1_GotFocus事件中,你需要打开和关闭它。如果用户正在与WB控制器进行交互,请关闭该代码,并在不希望遇到您提到的问题时再将其打开。

当然,你可以添加另一条线,以确保特定的控制/选项卡/面板等获得焦点后,你从身体删除焦点。此外,还有另外3个SO问题可以帮助你解决问题,但这些问题可能会带来与我提供的方向不同的方向,这可能是因为问题与你的问题不一样,但是足够相似有用(不按优先顺序列出)。

Prevent WebBrowser control from stealing focus?

Webbrowser steals focus

Focusing WebBrowser control in a C# application

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

WB.Document.Body.Parent.RemoveFocus() 

哪我更喜欢,因为.Document对象在intellise上没有明确的.RemoveFocus方法我是在VS2012 RC中得到的。这可能是指HTML标记(而不是.Document对象),并且由于html标记是body标记的唯一父项,所以它是有意义的,并且在对象下的intellisense中没有可直接使用的“HTML”对象,因为你可以通过其他方式获得它,所以这样做更方便。

干杯,让我知道你是否需要更多的信息。

+0

感谢您的回答!我一定会尝试一下。现在我通过使用CTRL + TAB的热键解决了这个问题。当其他窗口调用CTRL + TAB并在激活的事件中再次注册时,取消注册热键。这可能不是一个理想的方法,但可以工作目前。 – user435293

+0

@ user435293好吧,当你有时间时,试试看,如果你有时间做这件事情的优雅方式(让我们知道如何去做),我回答了你的帖子,因为没有人这样做,只要你有一个最重要的解决方案。干杯。 –

相关问题