2009-08-01 3 views
1

Я использую построитель форм GUI в C#. У меня установлен TransparencyKey, а цвет backGround всей формы установлен на этот ключ Transparency, поэтому фон формы кажется невидимым. У меня также есть панель входа, которая появляется вначале, и после входа пользователя в систему исчезает, а другие панели становятся видимыми. Это все работает, за исключением случаев, когда я пытаюсь перекрывать любую из панелей. Отправлять назад или приносить на фронт никакой разницы. Если даже одна из панелей немного перекрывается, обе эти перекрывающиеся панели исчезают? Что может быть неправильным?Перекрывающиеся панели в C#

Приветствия Грант

+2

Предлагаю вам разместить кратчайший возможный образец кода, который создаст проблему, это приведет к гораздо большему числу шансов на ответ ... – ShuggyCoUk

ответ

1

Если это WinForms, нет никакого понятия вообще из Z-Order. Каждая панель попросит родительскую форму нарисовать ее фон. По этой причине прозрачность WinForms редко работает, как и следовало ожидать.

Сказав это, я не понимаю, почему панели исчезнут полностью, если есть какие-либо совпадения. Я реализовал этот тип вещей в прошлом и никогда не видел такого поведения. Можете ли вы воссоздать это в очень небольшом проектном примере и опубликовать код?

+0

Я вижу, что вы имеете в виду о заказе z. Нет необходимости показывать вам код. Если вы просто создали форму с ключом прозрачности (и цветом фона, установленным для этого ключа прозрачности). Если вы попытаетесь поместить любую панель поверх нее, она исчезнет. Без меня даже никогда не набирал ключ. Я этого не понимаю. То, что я закончил, - это написать код, который создает панель во время выполнения, и позиционирует ее на основе того, где находится форма. По какой-то причине это работает, но создавать их с помощью редактора gui нет. Спасибо за попытку помочь. Grant- – cozmokramer8

5

Не уверен, что то, что я скажу, применимо к тому, что вы делаете. Сегодня я пытался сделать что-то подобное с панелями в моей форме окна. У меня было две панели, которые я хотел переключить на их видимость, основываясь на контроле данных. PanelX будет видна, пока PanelY будет невидимым. Ну, у меня возникла проблема ... PanelX будет виден, а PanelY будет невидимым. Но если я изменил входные данные формы, где PanelY должен быть видимым, а PanelX должен быть невидимым, они были бы невидимыми. Я не мог заставить PanelY быть видимым независимо от того, что я сделал.

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

Короче говоря, убедитесь, что ваша панель находится в надлежащем контейнере.

+0

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

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