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