2010-08-10 65 views
0

使用Visual Studio 2008和VB.NET ...不透明表格疊加而不覆蓋任務欄

我創建了一個表格(OpaqueForm),這是其他形式的,我會用的ShowDialog打開之間的媒介形式。這個想法是,當我想使用.ShowDialog顯示一個表單時,這個OpaqueForm(不透明度不是100%)位於主表單和對話框表單之間,有效地「淡化」底層主表單。

OpaqueForm將FormBorderStyle屬性設置爲None,並在構造函數中接受它調用.ShowDialog的Form對象。效果運作良好,但有一個警告。任務欄也由OpaqueForm覆蓋;我假設,因爲它有一個FormBorderStyle None和一個最大化的WindowState。

我不希望OpaqueForm覆蓋任務欄,因爲如果讓我的模態窗體阻止用戶切換任務將是不禮貌的。我仍然可以使用FormBorderStyle的None來防止OpaqueForm覆蓋任務欄嗎?

回答

1

不知道我看到這會發生。只要確保覆蓋層與Show(所有者)一起顯示,以便它始終位於頂部,並且它具有與覆蓋表單完全相同的大小和位置。

你會在我的回答this thread中找到這樣一個覆蓋的示例代碼。

+0

.ShowDialog(所有者)在調整表單以匹配基礎表單後工作。 – HardCode 2010-08-11 21:00:01

1

爲什麼不把「不透明」面板放在另一個表格的頂部。使整個用戶窗口不透明是沒有意義的。因爲如果應用程序沒有運行最大化,他們會想要點擊其他應用程序。

+0

+1 - 你是對的,只覆蓋了應用程序的表單,而不是整個用戶窗口。 – HardCode 2010-08-11 21:00:29

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 2010-08-11 21:01:19

+0

我編輯了代碼,以便它支持多個顯示器。 – 2010-08-12 11:39:16

0

我有一個.ShowDialog()語句,導致子窗體顯示足夠大,它覆蓋任務欄。

事實證明,問題是我在子窗體代碼中都將MaximizeBox設置爲False。不知道爲什麼,但將其更改爲MaximizeBox = True使最大化的窗體停止侵入任務欄區域。