2009-08-08 142 views

回答

2
 using System.Windows.Forms; 
     using System.Drawing; 
     using System.Windows.Interop; 

     Screen screen = Screen.FromHandle(new WindowInteropHelper(this).Handle); 
     int i; 
     for (i = 0; i < Screen.AllScreens.Length; i++) 
     { 
      if (Screen.AllScreens[i] == screen) break; 
     } 
     i++; i = i % Screen.AllScreens.Length; 

     this.WindowState = WindowState.Normal; 
     int x = 0; 
     for (int j = 0; j < i; j++) 
     { 
      x += Screen.AllScreens[j].Bounds.Width; 
     } 
     this.Left = x + 1; 
     this.WindowState = WindowState.Maximized; 

這將最大化的窗口移動到下一個監視器。我沒有,雖然測試它,因爲我只有一個顯示器。移動的窗口中沒有最大化是很難的,因爲新顯示器的尺寸不一定與舊顯示器的尺寸相同,您可以不設置WindowState並將wi ndow在屏幕上,或者獲取當前監視器上窗口的x位置並將其添加到新的x位置。使用後者時,您需要檢查新位置是否仍在顯示器內。

另外請注意,這隻有在您的顯示器設置爲彼此相鄰時纔有效。監視器堆疊時這不起作用。

+0

THX,但不能在這裏解決寬度:X + = Screen.AllScreens [j]的.WorkingArea.Width; – 2009-08-08 20:05:03

+0

您需要將System.Windows.Forms和System.Drawing添加到您的程序集引用。 – Ruud 2009-08-08 20:05:35

+0

我忘記了繪圖...但現在是問題,這是短暫的閃爍,但不改變桌面 – 2009-08-08 20:10:31

0

我已經在與的MouseLeftButtonDown點擊最大化的窗口最小化,然後這個解決問題

,現在我可以拖動這個到其他屏幕。所述的MouseLeftButtonUp了Methode窗口最大化

private void win_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    click = new Point(e.GetPosition(this).X, e.GetPosition(this).Y); 
    win.WindowState = WindowState.Normal; 
} 

private void Window_MouseMove(object sender, MouseEventArgs e) 
{ 
    this.Left += e.GetPosition(this).X - click.X; 
    this.Top += e.GetPosition(this).Y - click.Y; 
} 

private void win_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    win.WindowState = WindowState.Maximized; 
} 

THX @所有:)

相關問題