选项卡上的WebBrowser控件使主窗口处于非活动状态

时间:2011-03-07 23:45:48

标签: c# winforms pdf browser active-window

我有一个Visual Studio 2008 .NET 2.0 WinForms应用程序,它在其主要TabControl的一个TabPages上包含一个WebBrowser控件。此WebBrowser仅用于显示随应用程序一起分发的PDF文件,除该WebBrowser控件本身外,该选项卡上没有其他控件。

问题:在程序启动时,应用程序的主窗口未设置为活动状态。在激活之前,必须通过[Alt-Tab]单击或选择它。

我已经将它跟踪到这两行,从FormMain_Load()开始。我已经形成了一个我要显示的PDF文件的完全限定路径,并调用File.Exists()以确保它确实存在(并且它是):

Uri uri1 = new Uri("path\\to\\filename.pdf");
webBrowser1.Url = uri1;

如果我注释掉上面的第二行,当然它不会将PDF文件加载到WebBrowser控件中,但程序可以正常启动 - 它的主窗口是活动的(标题栏获取“活动窗口” “colors”和文本光标在第一个选项卡的第一个字段中闪烁,我在FormMain_Shown()中使用TextBox.Select()放置它。

如果我在第二行添加,则PDF文件会正确加载 - 但在启动时,程序的主窗口处于非活动状态(标题栏获取“非活动窗口”颜色)。这不是焦点问题,但可能与z顺序有关。没有其他窗口遮挡主窗口,因为我刚从桌面图标启动程序,屏幕底部的任何按钮都没有显示任何窗口处于活动状态。它正常启动,而不是最小化或最大化。

顺便说一下,WebBrowser控件所在的TabPage不是第一个选项卡。我只知道它正确加载PDF文件,因为这些行不会抛出异常,当我点击该选项卡时,PDF文件显示正常。另外FWIW我有最新的IE更新和Adobe Reader X版本。

我认为这可能是我的开发机器(带有一些IDE插件的Windows 7 64位Ultimate)的奇怪之处,但运行标准32位XP的客户也在报告它。另外我在7和Vista中的XP虚拟机也表现出同样的东西。只要我禁用加载URL,程序就会按预期启动为活动窗口。

1 个答案:

答案 0 :(得分:1)

不幸的是,我从来没有找到(非解决方法)解决方案来解决我过去遇到的完全相同的问题。有一种方法可以阻止IE7通过ActiveX窃取焦点(所以我读过),但我从来没有追求它。

我最终做的是将.pdf加载到TabControl的OnSelectedIndexChanged事件中的WebBrowser控件中,以便在用户实际进入WebBrowser控件所在的选项卡之前,焦点不会被盗。

我知道这不是最好的,但这就是我的全部。

这些看起来很有希望:

Prevent WebBrowser control from stealing focus?

http://www.pcreview.co.uk/forums/hidden-webbrowser-stealing-focus-t2616720.html