2008-09-22 142 views
21

我使用的是Windows Vista和C#.net 3.5,但我讓我的朋友在XP上運行該程序,並且遇到同樣的問題。C# - 爲什麼不能全屏winform應用程序總是覆蓋任務欄?

所以我有一個C#程序,我在後臺運行SystemTray中的圖標。我有一個低級別的鍵盤鉤子,所以當我按下兩個鍵(在這種情況下是Ctr + windows)時,它將拉取應用程序的主窗體。表單設置爲全屏在組合鍵中按下偶數句柄:

this.FormBorderStyle = FormBorderStyle.None; 
this.WindowState = FormWindowState.Maximized; 

所以它基本上可以工作。當我點擊CTR + Windows時,它會調出窗體,不管我已經關注哪個程序。但有時候,任務欄仍然會顯示在我不想要的表單上。我希望它在我點擊該組合鍵時始終處於全屏狀態。

我認爲它與最初的應用程序有什麼關係有關。但即使當我點擊我的主窗體時,任務欄有時也會停留在那裏。所以我想知道焦點是否真的是問題。看起來有時候任務欄很固執,不想坐在我的程序後面。

任何人有任何想法我可以解決這個問題?

編輯:更多詳細信息- 我試圖達到與放入全屏模式時的Web瀏覽器相同的效果,或者當您將PowerPoint放入演示模式時。

在Windows窗體中,您可以通過將邊框樣式設置爲none並最大化窗口來實現此目的。但是有時窗口由於某種原因不會覆蓋任務欄。一半的時間會。

如果我有最頂層的主窗口,其他人將落在它後面,當我點擊它時,如果任務欄被隱藏,我不需要它。

回答

18

試試這個(其中this是您的形式):

this.Bounds = Screen.PrimaryScreen.Bounds; 
this.TopMost = true; 

這將設置窗體到全屏,它會覆蓋任務欄。

0

據我所知,基於「將任務欄保留在其他窗口之上」設置,任務欄可以在窗口的上方或下方。 (至少,這是在XP中的措辭。)我想你可以嘗試看看你是否可以檢測到這個設置,並在需要時切換它?

+4

根據您的喜好更改用戶選擇的設置是不好的做法。最好找出如何使用API​​以正確的方式獲得你想要的行爲。 – Wedge 2008-09-22 23:42:11

+0

該設置僅適用於窗口應用程序,而不適用於全屏應用程序。因爲當我玩遊戲或將我的網絡瀏覽器全屏時,它會掩蓋任務欄。 – Joel 2008-09-23 03:43:38

0

嘗試調整表格,將它帶到Z順序的前面,像這樣:

 Rectangle screenRect = Screen.GetBounds(this); 
     this.Location = screenRect.Location; 
     this.Size = screenRect.Size; 
     this.BringToFront(); 
1
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F11) 
     if (FormBorderStyle == FormBorderStyle.None) 
     { 
      FormBorderStyle = FormBorderStyle.Sizable; 
      WindowState = FormWindowState.Normal; 
     } 
     else 
     { 
      SuspendLayout(); 
      FormBorderStyle = FormBorderStyle.None; 
      WindowState = FormWindowState.Maximized; 
      ResumeLayout(); 
     } 
} 
2

我已經嘗試了許多解決方案,其中一些適用於Windows XP和他們都沒有在Windows 7上運行的所有我寫一個簡單的方法,這樣做之後。

private void GoFullscreen(bool fullscreen) 
    { 
     if (fullscreen) 
     { 
      this.WindowState = FormWindowState.Normal; 
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
      this.Bounds = Screen.PrimaryScreen.Bounds; 
     } 
     else 
     { 
      this.WindowState = FormWindowState.Maximized; 
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
     } 
    } 

代碼的順序很重要,如果您更改WindwosState和FormBorderStyle的位置,將不起作用。

這種方法的優點之一是將TOPMOST留在錯誤上,以允許其他表單通過主窗體。

它絕對解決了我的問題。

相關問題