2010-08-10 2 views
0

с помощью Visual Studio 2008 и VB.NET ...Непрозрачный Форма Overlay Без покрытия Панель задач

Я создал форму (OpaqueForm), который является посредником между формой других форм, которые я буду открывать с ShowDialog. Идея состоит в том, что когда я хочу показать форму с использованием .ShowDialog, этот OpaqueForm с непрозрачностью, отличной от 100%, находится между основной формой и формой диалога, эффективно «вычеркивая» основную форму.

У OpaqueForm свойство FormBorderStyle установлено значение None и принимает в конструкторе объект Form, на который он вызывает .ShowDialog. Эффект работает нормально, но есть одно предостережение. Панель задач также покрывается OpaqueForm; Я предполагаю, что у него есть FormBorderStyle None и WindowState Maximized.

Я не хочу, чтобы OpaqueForm закрывал панель задач, потому что было бы невежливо, если бы моя модальная форма блокировала пользователя от переключения между задачами. Как я мог предотвратить предотвращение OpaqueForm для покрытия панели задач, но при использовании FormBorderStyle of None?

ответ

1

Не уверен, что я вижу, как это может произойти. Просто убедитесь, что наложение отображается с помощью Show (owner), чтобы он всегда был сверху и что он имеет тот же размер и местоположение, что и наложенная форма.

Вы найдете пример кода для такого наложения в моем ответе в this thread.

+0

.ShowDialog (владелец) работал после определения формы в соответствии с базовой формой. – HardCode

1

Почему бы не поставить «непрозрачную» панель поверх другой формы. Не имеет смысла сделать все окно пользователя непрозрачным. Поскольку, если приложение не работает максимально, они захотят нажать на другие приложения.

+0

+1 - Вы правы, только закрываете форму приложения, а не все окно пользователя. – HardCode

0

Установите размер размера формы на рабочую область экрана.

Dim f as New Form() 
f.FormBorderStyle = FormBorderStyle.None 
f.Location = New Point(0, 0) 
f.Size = My.Computer.Screen.WorkingArea.Size 

это сделает трюк.


Редактировать


Если вам необходимо поместить непрозрачный форму на Первичный экран, используйте следующий код:

For Each scr In Screen.AllScreens 
    If scr.Primary = True Then 
     Dim f As New Form() 
     f.FormBorderStyle = FormBorderStyle.None 
     f.Location = New Point(0, 0) 
     f.Size = scr.WorkingArea.Size 
    End If 
Next 

Если вы хотите поместить формы на каждом экране, просто пропустите проверку основного экрана, удалив условное выражение.

+0

Совместим ли этот монитор с несколькими мониторами? Я так не думаю. – McKay

+0

Я отредактировал код, чтобы он поддерживал несколько мониторов. –

0

У меня был оператор .ShowDialog(), из-за которого дочерняя форма отображалась достаточно большой, чтобы она закрывала панель задач.

Как оказалось, проблема заключалась в том, что у меня был максимальный набор MaximizeBox для False в коде дочерней формы. Не уверен, почему, но изменив его, чтобы MaximizeBox = True сделал максимальную форму, чтобы остановить вторжение в область панели задач.

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