2010-09-20 11 views
11

Ho riscontrato un problema durante la visualizzazione di una schermata iniziale in un sistema con due monitor. Quando avvio l'applicazione sul display principale e il puntatore del mouse viene spostato sul secondo monitor prima che venga visualizzata la schermata iniziale, la schermata iniziale "segue" il puntatore del mouse. Ciò significa che la schermata iniziale viene visualizzata nel 2 ° display e, al termine del suo lavoro, scompare e l'applicazione viene visualizzata sul monitor principale. Questo sembra piuttosto brutto e poco professionale.C# Come forzare la visualizzazione di una slpash sul display principale in un sistema a doppio monitor?

Ho provato a impostare la proprietà FormStartPosition.CenterScreen nelle proprietà del modulo e impostarlo in fase di esecuzione nel costruttore del mio modulo ma nessuna di queste ha funzionato. A proposito, sto usando C#.

Eventuali suggerimenti per ottenere che la schermata iniziale venga visualizzata sullo stesso monitor della mia applicazione?

Qualsiasi aiuto sarà apprezzato profondamente.

Saluti, Victor

+0

Una schermata iniziale 'seguendo' il puntatore del mouse è molto insolita. Questo non succede per caso, c'è sicuramente del codice che puoi commentare per disabilitare questa funzione. Non posso aiutarti a trovare quel codice, naturalmente. –

+0

@HansPassant: questo "comportamento" affligge la mia applicazione Winforms anche in .NET 4.0. Sto visualizzando una finestra di dialogo di accesso all'avvio e insiste ostinatamente a comparire su qualsiasi monitor che "possiede" il mouse al momento. È * altamente * fastidioso. Più interessante, la correzione in questo post non ha funzionato per me. –

risposta

7

Nel principale, è necessario forzare il modulo per avviare sul monitor principale. Ecco come aprire un modulo a (0, 0) sul monitor principale.

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     Form1 f = new Form1(); 
     f.StartPosition = FormStartPosition.Manual; 
     f.Location = Screen.PrimaryScreen.Bounds.Location; 

     Application.Run(f); 
    } 
+0

Ciao Alex, grazie per la tua risposta, sfortunatamente questo non ha aiutato a risolvere il problema. Avrei dovuto dire che la schermata iniziale è inclusa in una DLL (un componente creato in C#) chiamata da un'applicazione C++. Quindi la schermata iniziale deve essere mostrata nel display in cui viene avviata l'applicazione C++. Ho provato a includere la linea f.Location = Screen.PrimaryScreen.Bounds.Location; nel costruttore dello schermo di slpash ma non ha aiutato. Qualche idea? – user452852

+1

Ciao, il problema è stato risolto includendo le linee follwing nel mio costruttore di Form: this.Location = Screen.PrimaryScreen.Bounds.Location; this.CenterToScreen; Se uso this.StartPosition = FormStartPosition.CenterScreen; poi ho il problema descritto. Grazie per l'aiuto ! – user452852

+0

Felice di poterti guidare nella giusta direzione. –

Problemi correlati