Domanda

Ho un'applicazione Windows in C # che voglio garantire verrà visualizzato su un secondo monitor se l'utente si muove a uno. Ho bisogno di salvare la principale forma di formato, la posizione e lo stato della finestra - che ho già gestito - ma ho anche bisogno di sapere su quale schermo si era accesa quando l'utente ha chiuso l'applicazione

.

Sto utilizzando la classe Screen per determinare la dimensione della schermata corrente, ma non riesco a trovare nulla su come determinare quale schermo l'applicazione è in esecuzione su.

Edit: Grazie per le risposte, tutti! Volevo determinare quale monitorare la finestra era su così ho potuto fare giusto limite di controllo nel caso in cui l'utente accidentalmente messo la finestra fuori dell'area di visualizzazione o cambiato le dimensioni dello schermo in modo tale che la forma non sarebbe più completamente visibile.

È stato utile?

Soluzione

È possibile ottenere una vasta gamma di schermi che avete utilizzando questo codice.

Screen[] screens = Screen.AllScreens;

Si può anche capire quale schermo ci si trova, eseguendo questo codice ( questo è il Windows Form si è in)

Screen screen = Screen.FromControl(this); //this is the Form class

In breve controllare i metodi della classe dello schermo e di supporto statica, potrebbero aiutare.

MSDN link , non lo fa hanno much..I suggeriscono fare in giro nel codice da lei.

Altri suggerimenti

Se vi ricordate la posizione e le dimensioni della finestra, che sarà sufficiente. Quando si imposta la posizione alla posizione precedentemente utilizzato, se è capitato di essere sul secondo monitor sarà tornare lì.

Ad esempio, se si dispone di 2 monitor, sia di dimensioni 1280x1024 e impostare la posizione a sinistra del vostro finestra da 2000px, apparirà sul secondo monitor (assumendo il secondo monitor si trova a destra del primo.):)

Se siete preoccupati per il secondo monitor non essere lì quando l'applicazione viene avviata la prossima volta, è possibile utilizzare questo metodo per determinare se la vostra finestra interseca una delle schermate:

private bool isWindowVisible(Rectangle rect)
{
    foreach (Screen screen in Screen.AllScreens)
    {
        if (screen.Bounds.IntersectsWith(rect))
            return true;
    }
    return false;
}

Basta passare in posizione desiderata della vostra finestra e vi dirà se sarà visibile su uno degli schermi. Buon divertimento!

È possibile ottenere la schermata corrente con

var s = Screen.FromControl(this);

dove this è la forma (o qualsiasi controllo del form). Come su come ricordare che è un po 'complicato, ma vorrei andare per l'indice nella matrice Screen.AllScreens, o forse s.DeviceName. In entrambi i casi, controllare prima utilizzando le impostazioni all'avvio, per evitare che utilizzando un monitor che è stato scollegato.

La posizione del modulo vi dirà che la forma schermo è acceso. Io non capisco il motivo per cui si avrebbe bisogno di sapere che cosa lo screening è su, perché se si ripristina utilizzando la posizione è stata salvata deve solo riportare nella stessa posizione (forse è possibile espandere sul perché).

In caso contrario, si può fare qualcosa di simile:

Screen[] scr = Screen.AllScreens;
scr[i].Bounds.IntersectsWith(form.Bounds);

Ogni schermo ha una proprietà Bounds che restituisce un rettangolo. È possibile utilizzare la funzione IntersectsWith () per determinare se il modulo è all'interno dello schermo.

Inoltre, si tratta fondamentalmente di fornire una funzione che fa questo e sulla classe Screen

Screen screen = Screen.FromControl(form);

È possibile utilizzare l'oggetto 'Screen': System.Windows.Forms.Screen

Inizia a giocare con qualcosa di simile:

        Screen[] screens = Screen.AllScreens;
        for (int i = 0; i < screens.Length ; i++)
        {
            Debug.Print(screens[i].Bounds.ToString());
            Debug.Print(screens[i].DeviceName);
            Debug.Print(screens[i].WorkingArea.ToString());
        }

Si può ottenere quello che ti serve

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top