2009-07-02 21 views
0

Stellen Sie sich den folgenden Code vor. Nur das erste Fenster erscheint oben, alle folgenden Fenster werden nicht aus irgendeinem Grund programmatisch fokussiert (sie erscheinen im Hintergrund). Irgendeine Idee, wie man das umgehen kann? Übrigens, statische Methoden/Eigenschaften sind nicht erlaubt und auch keine globale Eigenschaft.Warum ist nur das erste Fenster fokussierbar

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

     Thread t1 = new Thread(CreateForm); 
     t1.SetApartmentState(ApartmentState.STA); 
     t1.Start(); 
     t1.Join(); 

     t1 = new Thread(CreateForm); 
     t1.SetApartmentState(ApartmentState.STA); 
     t1.Start(); 
     t1.Join(); 
    } 

    private static void CreateForm() 
    { 
     using (Form f = new Form()) 
     { 
      System.Windows.Forms.Timer t = new System.Windows.Forms.Timer 
      { 
       Enabled = true, 
       Interval = 2000 
      }; 
      t.Tick += (s, e) => { f.Close(); t.Enabled = false; }; 

      f.TopMost = true; 
      Application.Run(f); 
     } 
    } 
+0

Wie können Sie zwei Artikel als "TopMost" haben? Stellen Sie sich eine Warteschlange an der Kasse vor. Wenn Sie die erste Person in der Warteschlange sind, kann niemand den ersten Platz einnehmen. Wenn jemand den ersten Platz nimmt, verlieren Sie automatisch Ihren ersten Platz. Können Sie uns sagen, was Sie erreichen möchten? – SolutionYogi

+0

Durch Join() werden die Fenster erstellt und in der Reihenfolge angezeigt, nicht gleichzeitig. –

Antwort

0

Hans Passant solved the problem: nur verwenden SetForegroundWindow() (P/Invoke). Shees, sollte ich aber davon haben :-)

Verwandte Themen