2009-04-15 114 views

回答

5
private void Form1_Load(object sender, EventArgs e) 
{ 
    this.FormBorderStyle = FormBorderStyle.None; 
    this.Bounds = GetSecondaryScreen().Bounds; 
} 

private Screen GetSecondaryScreen() 
{ 
    foreach (Screen screen in Screen.AllScreens) 
    { 
     if (screen != Screen.PrimaryScreen) 
     return screen; 
    } 
    return Screen.PrimaryScreen; 
} 
+0

上這工作,但需要參考System.Windows.Forms.dll – 2010-05-23 21:08:17

0

這不是從你的問題清楚,如果你正在尋找一種方式將窗口移動到輔助監視器,然後去全屏,或者如果你只是希望支持全屏模式無論顯示器的窗口上(可能是主要的或次要的)。

如果以後,對於WPF窗口,雖然與全屏模式不太一樣,但可以在最大化時刪除邊框,並在未最大化時恢復邊框。不需要檢查哪個監視器等。標題/標題欄的顯示由邊界狀態控制。

protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == WindowState.Maximized) 
     { 
      if (WindowStyle.None != WindowStyle) 
       WindowStyle = WindowStyle.None; 
     } 
     else if (WindowStyle != WindowStyle.SingleBorderWindow) 
      WindowStyle = WindowStyle.SingleBorderWindow; 

     base.OnStateChanged(e); 
    } 

幸得帕維爾在當前問題他基於窗體的答案,並以尼爾,他在this question答案。

8

對於WPF應用程序,請看this post。最終取決於WindowState何時被設置爲最大化。如果您將其設置在XAML或窗口構造函數中(即在窗口加載之前),它將始終在主顯示屏上最大化。另一方面,如果您在加載窗口時將WindowState設置爲Maximized,它將在之前最大化的屏幕上最大化。

+0

**謝謝!**幫助將窗口類構造函數的恢復位置代碼移動到_Loaded_處理程序。我唯一應該補充的是,Window類在發送_Loaded_通知之前使用默認設置發送_LocationChanged_通知,所以您應該跳過_LocationChanged_通知,直到您還原_Loaded_處理程序中的窗口位置。 – Mar 2015-07-02 05:52:33

-1

在WPF中:將WindowState屬性設置爲普通(非最大),並創建加載的事件。在這種情況下編寫代碼:

this.Left = SystemParameters.PrimaryScreenWidth + 100; 
this.WindowState = System.Windows.WindowState.Maximized; 
+3

假設輔助監視器位於主監視器的右側。 – Paul 2012-02-14 14:13:56

32

最大化窗口到輔助監視器(如果有的話)的擴展方法。 不假定輔助監視器是System.Windows.Forms.Screen.AllScreens [2];

using System.Linq; 
using System.Windows; 

namespace ExtendedControls 
{ 
    static public class WindowExt 
    { 

     // NB : Best to call this function from the windows Loaded event or after showing the window 
     // (otherwise window is just positioned to fill the secondary monitor rather than being maximised). 
     public static void MaximizeToSecondaryMonitor(this Window window) 
     { 
      var secondaryScreen = System.Windows.Forms.Screen.AllScreens.Where(s => !s.Primary).FirstOrDefault(); 

      if (secondaryScreen != null) 
      { 
       if (!window.IsLoaded) 
        window.WindowStartupLocation = WindowStartupLocation.Manual; 

       var workingArea = secondaryScreen.WorkingArea; 
       window.Left = workingArea.Left; 
       window.Top = workingArea.Top; 
       window.Width = workingArea.Width; 
       window.Height = workingArea.Height; 
       // If window isn't loaded then maxmizing will result in the window displaying on the primary monitor 
       if (window.IsLoaded) 
        window.WindowState = WindowState.Maximized; 
      } 
     } 
    } 
} 
+0

工作就像一個魅力... – kennyzx 2012-07-17 06:20:06

6

我注意到主張設定Loaded事件的位置的答案,但是這會導致閃爍時首先顯示正常的窗口然後最大化。如果您訂閱SourceInitialized事件在構造函數,並設置在那裏它會處理最大化到二次監視無閃爍的位置 - 我在這裏假設WPF

public MyWindow() 
{ 
    SourceInitialized += MyWindow_SourceInitialized; 
} 

void MyWindow_SourceInitialized(object sender, EventArgs e) 
{ 
    Left = 100; 
    Top = 50; 
    Width = 800; 
    Height = 600; 
    WindowState = WindowState.Maximized; 
} 

任何替代COORDS您的輔助監視器