Как свернуть и развернуть форму WinForms, не теряя свой браузер CefSharp? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть браузер CefSharp, добавленный в качестве элемента управления на панель WinForms.Это нормально при первой загрузке - браузер работает как положено.

Это приложение регулярно сворачивается на панель задач, что выполняется путем вызова hide () и show () в форме.Это отлично работает для формы и отлично работает со встроенным браузером Internet Explorer (элемент управления WebBrowser по умолчанию)

Однако, когда я скрываю / показываю форму, браузер CefSharp, похоже, не перерисовываетсявместе с формой.При щелчке правой кнопкой мыши там, где должен находиться браузер, отображается контекстное меню формы, а не контекстное меню браузера, что говорит о том, что браузер не привязан к этой форме, а веб-страница в браузере отображается неправильно.

Сначала я предполагал, что он был признан недействительным и его необходимо перерисовать, и пробовал различные Show, Invalidate, Refresh, Update вызовы методов в форме, панели и самом браузере.Я также попытался очистить элементы управления панели и снова добавить браузер ... кажется, что ничего из этого не работает.

При отладке объект браузера присутствует, имеет тот же URL-адрес и родительский объект, все еще показывает"fill" как режим закрепления, имеет разумные размеры высоты / ширины и т. д., поэтому он не выглядит так, как будто он каким-то образом отделен от родителя и т. д., он просто не перерисовывается при повторном отображении формы

Есть ли "правильный" способ скрытия и отображения формы, содержащей браузер CefSharp, или какой-то другой способ заставить браузер перерисовать, которого мне не хватает?

1 Ответ

0 голосов
/ 05 декабря 2018

Итак, вот мое собственное решение, найденное с некоторой помощью Çöđěxěŕ в комментариях (который также указывает, что использование Show() и Hide() не является правильным способом показать / скрыть форму вообще, вместо этого используйте WindowState)

В моем случае проблема возникла из-за использования Form.ShowInTaskbar

при установке для параметра Form.ShowInTaskbar значения False (например, не показывать значок для моего приложения, когда я простосворачивая его в панель задач), элемент управления браузера, похоже, запутался в том, какая форма является родительской, что, по-видимому, связано с изменением Form.Handle.

Мое решение состояло в том, чтобы установить ShowInTaskBar как ложное в приложениизагружать (чтобы приложение никогда не находилось на панели задач) или не устанавливать значение false при свертывании (поэтому оно всегда находится на панели задач при сворачивании в системный трей).Ни один из них не является идеальным решением, но они работают с оговоркой, что приложение должно быть всегда скрыто или никогда не скрыто.

Предположительно, было бы возможно правильно назначить родителя при максимизации

...