En la actualidad es bastante habitual el tener más de una pantalla conectado a nuestro ordenador, ya sea dos pantallas, pantalla y televisión, etc.
Esto lo podemos aprovecharlo para mostrar diferentes ventanas de nuestros programa en cada una de las pantallas.
Windows maneja los multimonitores como si fuera uno con la resolución de la suma de todos ellos, es decir, si tenemos 2 monitores con una resolución de 1024×768 cada uno, para windows la resolución de la pantalla sera de 2048×768.
Con lo que, para poder posicionar nuestro nuevo formulario en el otro monitor, le sumaríamos la resolución de nuestro monitor al parámetro «left» de nuestro nuevo Form. Si solo utilizamos 2 monitores no hay problema, pero cuando son varios monitores y con distintas resoluciones cada uno, se complica la cosa.
Para hacernos la vida mas fácil, C# dispone de una clase llamada «Screen» de donde podemos obtener mucha información de las pantallas que tenemos instaladas en nuestro equipo. Una de estas funciones que hay en «Screen» es «Bound», esta función nos devuelve la posición de la esquina superior izquierda, es decir, «Left» y «Top» donde empieza cada una de las pantallas.
Declaración de la variable
// Declaramos una variable para manejar los monitores
Screen[] sMonitores;
sMonitores = Screen.AllScreens;
Funcionamiento
// Posicion del formulario
fNuevo.Left = sMonitores[1].Bounds.Left;
fNuevo.Top = sMonitores[ 1].Bounds.Top;
Como siempre, cuando hacemos referencia a una lista la posición siempre empieza por «0». Si queremos referirnos al monitor 2, tendríamos que por 1.
Este ejemplo abriría nuestro nuevo formulario en la posición 0, 0 de la pantalla 2.
Si queremos posicionarlo en otro lugar de la pantalla que fuese la 0, 0, sumaríamos el desplazamiento correspondiente tanto al parámetro «Left» como al «Top».
// Posicion del formulario
fNuevo.Left = sMonitores[2].Bounds.Left + 200;
fNuevo.Top = sMonitores[2].Bounds.Top + 100;
En este otro ejemplo, el formulario se abriría en la posición 200×100 del monitor 3.
Para saber cuantos monitores tenemos funcionando en nuestro equipo podemos utilizar la siguiente función.
NumMonitoresFuncionando = sMonitor.Rank + 1
Y ya esta con esto podemos abrir nuestro Form en cualquier monitor sin preocuparnos que resolución tiene cada uno.