2009-07-02 10 views
0

以下のコードを想像してみてください。最初のウィンドウのみが先頭に表示されます。後続のウィンドウはすべて、何らかの理由でプログラム的にフォーカスされたり、バックグラウンドで表示されたりしません。これを回避するにはどのような考えですか?ところで、静的メソッド/プロパティは許可されていませんし、グローバルプロパティでもありません。最初に表示されたウィンドウのみがフォーカス可能な理由

[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」としてどのように2つのアイテムを持てますか? ボックスオフィスのキューを想像してみてください。あなたがキューにいる最初の人であれば、他の誰も最初の場所を取ることはできません。誰かが最初の場所を取ると、自動的に最初の場所が失われます。 達成しようとしていることを教えてください。 – SolutionYogi

+0

Join()のため、ウィンドウは同時に作成されずにシーケンスで表示されます。 –

答えて

0

Hans Passant solved the problem:SetForegroundWindow()(P/Invoke)を使用します。 Shees、私はそれを持っているはずです:-)

関連する問題