Come faccio a sapere se il mio modulo viene visualizzato oltre lo schermo?
-
06-09-2019 - |
Domanda
Così ho due forme, MainForm e extraform.
extraform è impostato sempre spostato a destra di MainForm quando MainForm inizializza
A volte mainform riprende entrambi i monitor e extraform viene spinto fuori dallo schermo per non essere mai più visto. Vorrei evitare questo, se possibile. Come posso fare così? Essa deve sostenere due monitor, che possono o non possono avere distanza fra loro (cioè schermo 1 è 20px a fianco di schermo 2).
Come posso fare questo?
Soluzione
È possibile utilizzare la classe Screen di capire dove la vostra finestra è relativo al desktop. La classe Screen ha un metodo FromRectangle, in modo da poter capire quale schermo si dovrebbe essere Collocazione del modulo dal (passando proprietà Bounds del modulo a).
Ogni oggetto dello schermo ha una proprietà Bounds, che può essere utilizzato per confrontare la posizione e le dimensioni della finestra, e regolare di conseguenza.
Altri suggerimenti
Dipende da cosa si vuole dovrebbe accadere quando extraform è spinto oltre i limiti dello schermo (s).
Tuttavia, per sapere se sia o non è essere spinto fuori, è abbastanza semplice utilizzando la classe System.Windows.Forms.Screens. Poi si può fare il controllo dei limiti in questo modo:
foreach (var screen in Screen.AllScreens)
{
if(screen.Bounds.Contains(this.Bounds))
{
Console.WriteLine("Device "+screen.DeviceName+" contains form!");
}
}
Codice assume di essere in forma. Si noti che questo codice stampa solamente che uno schermo contiene il modulo se il modulo è completamente contenuto sullo schermo. Ma questo dovrebbe essere piuttosto semplice da risolvere, a seconda delle esigenze.
Forse la proprietà DesktopLocation nei moduli può dare un indizio su quello che succede con ciò che sta accadendo con loro