2

我有一个 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 控件中,但是程序可以正常启动——它的主窗口是活动的(标题栏获得“活动窗口”颜色)并且文本光标在第一个选项卡上的第一个字段中闪烁,我将它与 FormMain_Shown() 中的 TextBox.Select() 一起放置。

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

顺便说一句,WebBrowser 控件所在的 TabPage 不是第一个选项卡。我只知道它正确加载了 PDF 文件,因为这些行不会引发异常,当我单击该选项卡时,PDF 文件显示正常。FWIW 我还有最新的 IE 更新和 Adob​​e Reader X 版本。

我认为这对于我的开发机器(带有一些 IDE 插件的 Windows 7 64 位 Ultimate)可能有些古怪,但运行标准 32 位 XP 的客户也报告了它。我在 7 和 Vista 中的 XP 虚拟机也显示相同的内容。一旦我禁用加载 URL,程序就会按预期作为活动窗口启动。

4

1 回答 1

1

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

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

我知道这不是最好的,但这就是我所拥有的。

这些看起来很有希望:

防止 WebBrowser 控件窃取焦点?

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

于 2011-03-08T00:15:09.377 回答