2016-08-15 18 views
1

2つの画面にウィンドウを開くプログラムを作成しようとしています。 両方のウィンドウを両方のモニタにフルスクリーンで表示したい。2番目のモニタのフルスクリーンウィンドウ

私はwin.forms機能画面を使用しました。すべての画面は になります。最初の画面ではすべて正常です。セカンダリ画面の では、ウィンドウは全画面表示ではありません。

私は両方のモニタの値を表示するコードを書いています。 モニター2の値が正しくないことがわかりました。両方のモニタは192×1080

上にあるが、第2のモニタは、私は窓2に最大化するためにのWindowStateを設定したが、その後、ウィンドウ2がスクリーン1に開口1536 X 864

 if (System.Windows.Forms.SystemInformation.MonitorCount < 2) 
     { 
      primaryScreen = System.Windows.Forms.Screen.PrimaryScreen; 
     } 
     else 
     { 
      if (screennumber == 2) 
      { 
       primaryScreen = System.Windows.Forms.Screen.AllScreens[1]; 
       secondaryScreen = System.Windows.Forms.Screen.PrimaryScreen; 
      } 
      else 
      { 
       primaryScreen = System.Windows.Forms.Screen.PrimaryScreen; 
       secondaryScreen = System.Windows.Forms.Screen.AllScreens[0]; 
      } 
     } 

     if (screennumber == 2) 
     { 
      ScreenTwo newWindow = new ScreenTwo(); 
      newWindow.WindowStartupLocation = WindowStartupLocation.Manual; 
      newWindow.Left = m_PrimaryScreen.WorkingArea.Left; 
      newWindow.Top = m_PrimaryScreen.WorkingArea.Top; 
      newWindow.Width = m_PrimaryScreen.WorkingArea.Width; 
      newWindow.Height = m_PrimaryScreen.WorkingArea.Height; 
      newWindow.Show(); 
     } 
     else 
     { 
      ScreenOne newWindow = new ScreenOne(); 
      newWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
      newWindowWindowStyle = WindowStyle.SingleBorderWindow; 
      newWindow.ShowInTaskbar = true; 
      newWindow.ResizeMode = ResizeMode.CanResizeWithGrip; 
      newWindow.WindowState = WindowState.Maximized; 
      newWindow.Show(); 
     } 
    } 

として示されています。 誰でも私はこれを修正する方法を知っていますか?

+1

Windowsは、あなたがそれをしたい画面への参照を行うdoesntの開設のためのあなたのコードなので、はい、それは、WPFのではなくWinFormsのように見え、主画面 – BugFinder

答えて

1

Going fullscreen on secondary monitor

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; 
      } 
     } 
    } 
} 
+1

に表示されますか?!? (または両方の組み合わせ)。 –

+0

ライブラリは同じですが、それを適応させるのはあまり難しくないと思いました。そうでない場合、私は自分の答えを削除するでしょう。 –

+0

マニュアルとしてのWindowStartUpLocationは重要な部分です ここにフォームの解決策があります http://stackoverflow.com/questions/1363374/showing-a-windows-form-on-a-secondary-monitor –

関連する問題