Windows фактически не поддерживает изменение стиля границы для дочерних окон MDI. Операционная система позволяет вам это делать, но это неподдерживаемая конфигурация и, скорее всего, глючит.
WinForms должен изолировать вас от этих проблем, так что это действительно ошибка дизайна. Это должно быть исключение при попытке изменить свойство FormBorderStyle
ребенка MDI. Внедрение поддержки MDI, вероятно, не было главным приоритетом Microsoft. Он был практически мертв, даже когда WinForms был впервые выпущен еще в 2001 году. Вся парадигма MDI больше не поддерживается и больше не рекомендуется использовать в программном обеспечении.
Как вы видели, вы можете взломать его так, чтобы он работал. Но вы получаете этот мерцающий эффект, потому что Windows пытается привлечь неклиентскую область, которая должна быть там.
Две лучшие идеи:
Stop с использованием устаревшей парадигмы MDI и найти другой, более удобный способ реализации вашего пользовательского интерфейса. Например, отдельные формы верхнего уровня. Или несколько вкладок.
Остановить использование уродливых пользовательских «скинов», которые нарушают стандартный внешний вид операционной системы, не могут быть настроены или отключены пользователем и имеют тенденцию к ошибкам.
Если вы абсолютно имеют сделать это, и вы хотите, чтобы сделать его хорошо выглядеть, то вы будете в основном придется повторно реализовать парадигму MDI самостоятельно. Создайте стандартную форму, которая будет служить вашим де-факто родителем. Затем вместо использования дочерних форм MDI вы будете использовать ряд классов UserControl (или форму с ее свойством TopLevel
, установленным на False
). Затем вы можете удалить рамку с рисунком, позволяющую рисовать все самостоятельно. Объекты UserControl будут отображаться в виде дочерних элементов «основной» формы, как и любой другой элемент управления. Все идет нормально. Теперь уродливая часть заключается в том, что вы сами несете ответственность за управление этими детьми: показывая их при необходимости, скрывая их при необходимости, позволяя пользователю перетаскивать их в «основной» форме, логику «максимизации» и «минимизации» «они и т. д. Вам придется написать свой собственный код, чтобы сделать это. Я категорически против этого; получение такого типа прав будет довольно сложным и сомнительным, как только вы закончите.
Мне бы очень хотелось знать, почему мой вопрос имеет downvoted ??? –