Элемент управления WebBrowser на вкладке делает главное окно неактивным - PullRequest
2 голосов
/ 08 марта 2011

У меня есть приложение 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 ().

Если я добавлю обратно в эту вторую строку, файл PDF будет загружен правильно, но при запуске главное окно программы неактивно (строка заголовка получает цвета «неактивного окна»). Это не проблема фокуса, но может быть связана с z-порядком. Никакие другие окна не закрывают главное окно, так как я только что запустил программу с иконки на рабочем столе, и ни одна из кнопок панели задач в нижней части экрана не отображает ни одного активного окна. Запускается нормально, не свернуто и не развернуто.

Кстати, эта вкладка, на которой живет элемент управления WebBrowser, не первая вкладка. Я только знаю, что он правильно загружает файл PDF, потому что эти строки не выдают исключение, и когда я нажимаю на эту вкладку, файл PDF отображается нормально. Кроме того, я получил последние обновления IE и версию Adobe Reader X.

Я подумал, что это может показаться странным в моей машине для разработки (Windows 7 64-битная версия Ultimate с несколькими подключаемыми модулями IDE), но пользователи с 32-битной операционной системой XP тоже сообщают об этом. Также мои виртуальные машины XP внутри 7 и Vista показывают то же самое. Как только я отключаю загрузку URL, программа запускается как активное окно, как и ожидалось.

1 Ответ

1 голос
/ 08 марта 2011

К сожалению, я так и не нашел (необходимое) решение той же проблемы, что и в прошлом. Есть способ предотвратить кражу фокуса в IE7 через ActiveX (так что я прочитал), но я никогда не преследовал его.

В итоге я загрузил .pdf в элемент управления WebBrowser в событии OnSelectedIndexChanged объекта TabControl, чтобы фокус не был украден до тех пор, пока пользователь фактически не вошел на вкладку, где существовал элемент управления WebBrowser.

Я знаю, что это не самое лучшее, но это все, что у меня есть.

Хотя это выглядит многообещающе:

Предотвращение кражи фокуса элементом управления WebBrowser?

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

...