2016-05-28 1 views
-1

Я работаю над проектом с Формы MDI. Моя проблема заключается в том, когда я открываю MDI child borderless. На мгновение я вижу это ...VB.NET - выпуск детской формы Borderless MDI на показанном

enter image description here

, а затем, кажется, будет хорошо ...

enter image description here

Любая идея, что может привести к этому? Обратите внимание, что строка заголовка и нижняя панель являются настраиваемыми элементами управления. FormBorderStyle является none !!!

+0

Мне бы очень хотелось знать, почему мой вопрос имеет downvoted ??? –

ответ

1

Windows фактически не поддерживает изменение стиля границы для дочерних окон MDI. Операционная система позволяет вам это делать, но это неподдерживаемая конфигурация и, скорее всего, глючит.

WinForms должен изолировать вас от этих проблем, так что это действительно ошибка дизайна. Это должно быть исключение при попытке изменить свойство FormBorderStyle ребенка MDI. Внедрение поддержки MDI, вероятно, не было главным приоритетом Microsoft. Он был практически мертв, даже когда WinForms был впервые выпущен еще в 2001 году. Вся парадигма MDI больше не поддерживается и больше не рекомендуется использовать в программном обеспечении.

Как вы видели, вы можете взломать его так, чтобы он работал. Но вы получаете этот мерцающий эффект, потому что Windows пытается привлечь неклиентскую область, которая должна быть там.

Две лучшие идеи:

  1. Stop с использованием устаревшей парадигмы MDI и найти другой, более удобный способ реализации вашего пользовательского интерфейса. Например, отдельные формы верхнего уровня. Или несколько вкладок.

  2. Остановить использование уродливых пользовательских «скинов», которые нарушают стандартный внешний вид операционной системы, не могут быть настроены или отключены пользователем и имеют тенденцию к ошибкам.

Если вы абсолютно имеют сделать это, и вы хотите, чтобы сделать его хорошо выглядеть, то вы будете в основном придется повторно реализовать парадигму MDI самостоятельно. Создайте стандартную форму, которая будет служить вашим де-факто родителем. Затем вместо использования дочерних форм MDI вы будете использовать ряд классов UserControl (или форму с ее свойством TopLevel, установленным на False). Затем вы можете удалить рамку с рисунком, позволяющую рисовать все самостоятельно. Объекты UserControl будут отображаться в виде дочерних элементов «основной» формы, как и любой другой элемент управления. Все идет нормально. Теперь уродливая часть заключается в том, что вы сами несете ответственность за управление этими детьми: показывая их при необходимости, скрывая их при необходимости, позволяя пользователю перетаскивать их в «основной» форме, логику «максимизации» и «минимизации» «они и т. д. Вам придется написать свой собственный код, чтобы сделать это. Я категорически против этого; получение такого типа прав будет довольно сложным и сомнительным, как только вы закончите.

+0

Большое спасибо за ваши советы !!! –

Смежные вопросы