c# - ¿Cómo me aseguro de que se muestre un formulario en el monitor "adicional" en un escenario de doble monitor?
winforms multiple-monitors (4)
A continuación se muestra una función que le permite mostrar un formulario en cualquier monitor. Para su escenario actual, puede llamar a este showOnMonitor(1);
.
Esencialmente, debe obtener la información de la pantalla de Screen.AllScreens
y luego obtener las dimensiones de cada uno, luego colocar el 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 se olvide de hacer la validación para asegurarse de que realmente tiene dos pantallas, de lo contrario se lanzará una excepción para acceder a sc[showOnMonitor]
Esta pregunta ya tiene una respuesta aquí:
Tengo una aplicación en la que hay un formulario que quiero mostrar en la segunda pantalla.
Significa si la aplicación se está ejecutando en la pantalla A y cuando hago clic en el menú para mostrar el formulario, debería aparecer en la pantalla B y lo mismo ocurre con si la aplicación se está ejecutando en la pantalla B y cuando hago clic en el menú para mostrar el formulario, debería aparecer en la pantalla A.
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;
}
Utilicé esto para una aplicación de pantalla dual XNA 4 (pantalla de juego XNA a pantalla completa + 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);
Debe usar la clase Screen
para encontrar una pantalla en la que no esté el formulario original, luego establezca la propiedad de Location
del segundo formulario según 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 número 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.