Элемент управления WebBrowser на вкладке делает главное окно неактивным
У меня есть приложение Visual Studio 2008 .NET 2.0 WinForms, которое содержит элемент управления WebBrowser на одной из вкладок его основного TabControl. Этот веб-браузер используется только для отображения файла PDF, который распространяется вместе с приложением, и на этой вкладке нет других элементов управления, кроме самого этого элемента управления веб-браузера.
Проблема: при запуске программы главное окно приложения не установлено активным. Его нужно щелкнуть или выбрать [Alt-Tab], прежде чем он станет активным.
Я проследил это до этих двух строк, запущенных из FormMain_Load(). Я сформировал полный путь к файлу PDF, который я хочу отобразить, и вызвал File.Exists(), чтобы убедиться, что он действительно есть (и он есть):
Uri uri1 = new Uri("path\\to\\filename.pdf");
webBrowser1.Url = uri1;
Если я закомментирую 2-ю строку выше, конечно, он не загружает файл PDF в элемент управления WebBrowser, но затем программа может запускаться нормально - ее главное окно активно (строка заголовка получает цвета "активного окна") и текстовый курсор мигает в первом поле на первой вкладке, где я поместил его с TextBox.Select() в FormMain_Shown().
Если я добавлю обратно в эту 2-ю строку, файл PDF будет загружен правильно, но при запуске главное окно программы неактивно (строка заголовка получает цвета "неактивного окна"). Это не проблема фокуса, но может быть связана с z-порядком. Другие окна не закрывают главное окно, так как я только что запустил программу с иконки на рабочем столе, и ни одна из кнопок панели задач в нижней части экрана не отображает ни одного активного окна. Он запускается нормально, а не свернуто или развернуто.
Кстати, эта вкладка, на которой живет элемент управления WebBrowser, не первая вкладка. Я только знаю, что он правильно загружает файл PDF, потому что эти строки не выдают исключение, и когда я нажимаю на эту вкладку, файл PDF отображается нормально. Кроме того, у меня есть последние обновления IE и версия Adobe Reader X.
Я подумал, что это может быть что-то странное в моей машине для разработки (Windows 7 64-bit Ultimate с несколькими подключаемыми модулями IDE), но клиенты, работающие со стандартной 32-битной XP, тоже сообщают об этом. Также мои виртуальные машины XP внутри 7 и Vista показывают то же самое. Как только я отключаю загрузку URL, программа запускается как активное окно, как и ожидалось.
1 ответ
К сожалению, я так и не нашел (не обходное решение) решение той же проблемы, что и в прошлом. Есть способ предотвратить кражу фокуса в IE7 через ActiveX (так что я прочитал), но я никогда не преследовал его.
В итоге я загрузил.pdf в элемент управления WebBrowser в событии OnSelectedIndexChanged объекта TabControl, чтобы фокус не был украден до тех пор, пока пользователь фактически не вошел на вкладку, где существовал элемент управления WebBrowser.
Я знаю, что это не самое лучшее, но это все, что у меня есть.
Это выглядит многообещающе, хотя:
Предотвратить контроль WebBrowser от кражи фокуса?
http://www.pcreview.co.uk/forums/hidden-webbrowser-stealing-focus-t2616720.html