Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему код разворачивания на весь экран Winforms работает, а код минимизации окна до значений по умолчанию не работает?

R V Ученик (68), на голосовании 6 месяцев назад
Здравствуйте. Я всю жизнь писал на веб-языках, которые не требуют компиляции. C# для меня - новый мир. Хотя мне проще понимать его, ибо, как-никак, имел дело хоть и с интерпретируемыми, но всё же языками, но есть вещи, которые меня в нём поражают. Я сейчас не буду говорить про нагромождение новых терминов, ибо с ними потихоньку пытаюсь разобраться. Путаюсь ещё, но хотя бы уже понимаю, где писать функции. У меня проблема с конкретным действием. А именно: разворачивание на весь экран (со скрытием панели задач) и обратное сворачивание главной формы. Происходит это по событию загрузки одного из элементов. Так вот, на просторах интернета мною был найден следующий код:
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

И он работает. Всё хорошо. Но когда (при некоторых обстоятельствах, например, при ошибке загрузки) нужно вернуть форму в прежние размеры, если она вдруг уже успела развернуться во весь экран, я применяю следующий (обратный) код:
FormBorderStyle = FormBorderStyle.Sizable;
WindowState = FormWindowState.Normal;

И ничего не работает. Окно остаётся развёрнутым на весь экран. Я уж и свойства формы менял, и пробовал вместо Normal установить Minimized. Ничего не помогает

Может быть, мой вопрос слишком "нубский", но всё же как мне вернуть форму в размеры по умолчанию (и расположить по центру экрана) ?
Надеюсь, я всё понятно изложил, если нужны будут какие-нибудь дополнения, напишу позже
Голосование за лучший ответ
Андрей Журавлев Мастер (2205) 7 месяцев назад
В целом должно работать, но могу предположить что:
1 - Код не выполняется (не доходит до него). Просто поставь брекпоинт и проверь.
2 - Размер окна равен размеру экрана и разница незаметна, но заголовок окна все равно должен включаться/отключаться.

Ну и небольшое замечание: при обратном действии TopMost остается включенным, что на работу влиять не должно, то окно останется поверх других, что может быть не всегда удобно.
R VУченик (68) 7 месяцев назад
Спасибо за ответ! Я нашёл, в чём проблема. Оказалось - совсем не в форме.
Код работал, но поскольку у меня был подключён Cefsharp (браузер chromium), он почему-то выдавал событие Frameloadend при изменении размера, хотя ничего не грузил и я вообще его скрывал ( Hide(); ). То есть форма действительно меняла размер, но тут же снова становилась полноэкранной, так как при успешной загрузке браузером это было написано у меня. В общем, при уменьшении формы пришлось программно отключать обработчик события этого самого браузера. Но вообще странно, похоже на баг самого браузера
R VУченик (68) 7 месяцев назад
Хотя возможно, это не баг и это событие возникает не только при успешной загрузке
Андрей Журавлев Мастер (2205) R V, Ну если верить документации, то это событие возникает всегда, не зависимо от успеха. Другой вопрос почему отрабатывает загрузка при изменении размеров окна, но это уже сам разбирайся) https://cefsharp.github.io/api/51.0.0/html/E_CefSharp_OffScreen_ChromiumWebBrowser_FrameLoadEnd.htm
Jurijus Zaksas Искусственный Интеллект (445796) 7 месяцев назад
Все там работает, просто твой код никогда не исполняется.
Похожие вопросы