2009-07-02 4 views
0

Представьте код ниже. Только первое окно появляется сверху, все последующие окна не будут и не могут быть программно сфокусированы по какой-либо причине (они появляются в фоновом режиме). Любая идея, как это сделать? BTW, статические методы/свойства не допускаются и не являются глобальным свойством.Почему только первое показанное окно является фокусным

[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

Как у вас есть два элемента как «TopMost»? Представьте себе очередь в кассе. Если вы первый человек в очереди, никто другой не может занять первое место. Если кто-то занимает первое место, вы автоматически теряете свое первое место. Не могли бы вы рассказать нам, чего вы пытаетесь достичь? – SolutionYogi

+0

Благодаря соединению() окна создаются и отображаются в последовательности, но не в одно и то же время. –

ответ

0

Ханс Passant solved the problem: просто использовать SetForegroundWindow() (P/Invoke). Shees, я должен был хотя бы из этого :-)

Смежные вопросы