¿Cómo me aseguro de que se muestre un formulario en el monitor “adicional” en un escenario de monitor dual?

Tengo una aplicación en la que hay un formulario que quiero mostrar en la segunda pantalla.

Mean Si la aplicación se está ejecutando en la pantalla A y cuando hago clic en el menú para mostrar la forma debe aparecer en la pantalla B y lo mismo si la aplicación se está ejecutando en la pantalla B y cuando hago clic en el menú para mostrar la pantalla debe aparecer en la pantalla A.

Debe usar la clase de Screen para buscar una pantalla en la que no esté el formulario original, luego configure la propiedad Location del segundo formulario en función de los Bounds esa pantalla.

Por ejemplo:

 var myScreen = Screen.FromControl(originalForm); var otherScreen = Screen.AllScreens.FirstOrDefault(s => !s.Equals(myScreen)) ?? myScreen; otherForm.Left = otherScreen.WorkingArea.Left + 120; otherForm.Top = otherScreen.WorkingArea.Top + 120; 

Esto funcionará para cualquier cantidad de pantallas.

Tenga en cuenta que es posible que la tarjeta de video esté configurada para que Windows vea una pantalla grande en lugar de dos más pequeñas, en cuyo caso esto se vuelve mucho más difícil.

A continuación hay una función que le permite mostrar un formulario en cualquier monitor. Para su escenario actual, puede llamar a este showOnMonitor(1); .

Básicamente, debe obtener información de la pantalla de Screen.AllScreens y luego obtener las dimensiones de cada uno, luego coloque su formulario donde lo necesite.

 function void showOnMonitor(int showOnMonitor) { Screen[] sc; sc = Screen.AllScreens; Form2 f = new Form2(); f.FormBorderStyle = FormBorderStyle.None; f.Left = sc[showOnMonitor].Bounds.Left; f.Top = sc[showOnMonitor].Bounds.Top; f.StartPosition = FormStartPosition.Manual; f.Show(); } 

Tenga en cuenta que no olvide hacer la validación para asegurarse de que realmente tiene dos pantallas, etc. de lo contrario, se lanzará una excepción para acceder a sc[showOnMonitor]

En el método OnLoad, cambie la ubicación de la ventana.

 protected void Form1_OnLoad(...) { showOnMonitor(1); } private void showOnMonitor(int showOnMonitor) { Screen[] sc; sc = Screen.AllScreens; if (showOnMonitor >= sc.Length) { showOnMonitor = 0; } this.StartPosition = FormStartPosition.Manual; this.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top); // If you intend the form to be maximized, change it to normal then maximized. this.WindowState = FormWindowState.Normal; this.WindowState = FormWindowState.Maximized; } 

Lo usé para una aplicación de pantalla doble XNA 4 (pantalla completa XNA Game Window + WinForm)

En el método Form_Load (), coloque el siguiente código:

 var primaryDisplay = Screen.AllScreens.ElementAtOrDefault(0); var extendedDisplay = Screen.AllScreens.FirstOrDefault(s => s != primaryDisplay) ?? primaryDisplay; this.Left = extendedDisplay.WorkingArea.Left + (extendedDisplay.Bounds.Size.Width / 2) - (this.Size.Width / 2); this.Top = extendedDisplay.WorkingArea.Top + (extendedDisplay.Bounds.Size.Height / 2) - (this.Size.Height / 2);