Элемент управления WebBrowser на вкладке делает главное окно неактивным

У меня есть приложение WinForms для Visual Studio 2008 .NET 2.0, которое содержит элемент управления WebBrowser на одной из страниц вкладок своего основного элемента управления TabControl. Этот WebBrowser используется только для отображения PDF-файла, который распространяется вместе с приложением, и на этой вкладке нет других элементов управления, кроме самого элемента управления WebBrowser.

Проблема: при запуске программы главное окно приложения не становится активным. Прежде чем он станет активным, его необходимо щелкнуть или выбрать с помощью [Alt-Tab].

Я отследил это до этих двух строк, запущенных из FormMain_Load (). Я сформировал полный путь к файлу PDF, который хочу отобразить, и вызвал File.Exists (), чтобы убедиться, что он действительно там (и он есть):

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

Если я закомментирую вторую строку выше, конечно, он не загружает файл PDF в элемент управления WebBrowser, но затем программа может нормально запуститься - ее главное окно активно (строка заголовка получает цвета «активного окна») и текстовый курсор мигает в первом поле на первой вкладке, куда я поместил его с помощью TextBox.Select () в FormMain_Shown ().

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

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

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


person Jeff Elliott    schedule 07.03.2011    source источник
comment
То, как Adobe Reader захватывает окно IE, является очень плодородным источником ошибок. Активация Windows, фокус, колесико мыши - проблемные места. Они просто не знают, как заставить его работать без проблем, и никогда не поймут это правильно. Запустите Reader напрямую, если вы заботитесь о психическом здоровье в долгосрочной перспективе.   -  person Hans Passant    schedule 08.03.2011


Ответы (1)


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

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

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

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

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

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

person Justin Skiles    schedule 08.03.2011
comment
Спасибо jskiles1. Я видел эти страницы в поиске Google, но они не совсем решают мою конкретную проблему. Первый говорит о предотвращении поведения, которое я пытаюсь создать - жаль, что у меня не было ЕГО проблемы! Второй, кажется, обсуждает сохранение и восстановление фокуса до и после перехода на веб-страницу. Однако я проверю событие Deactivate родительской формы, а также некоторые события WebBrowser. Спасибо! - person Jeff Elliott; 08.03.2011