2013-06-22 61 views
3

我需要關注表單,如果它已經打開,否則我想打開新表單。如果已經打開,關注winform?

我已經試過這段代碼來解決我的問題,但它打開新窗體而不是聚焦已打開的窗體。

foreach (var item in Application.OpenForms) 
     { 
      Form form1 = item as Form ; 
      if (form1 != null) 
      { 
       form1.Activate(); 
       break; 
      } 
      else 
      { 
       form1 = new Form(); 
       form1.Show(); 
       break; 
      } 

     } 
+0

什麼不工作? – Sayse

+0

「但不工作」並沒有給我們提供任何有關*如何*它不工作的信息。另外,你真的想要所有的*這個應用程序擁有的形式*? *任何*形式而不是特定類型的表單?你爲什麼只是創建一個新的「Form」而不是一些自定義的表單? –

+0

上面的代碼爲這個問題,每次它打開新的形式,而不是專注於已經存在的形式。 –

回答

7

猜測是,問題是,你只能在實際看第一種形式 - 你得在if語句的兩個部分一個break聲明......而你也只是使用幾乎肯定不合適的一般Form類型。你可能想要:

var form = Application.OpenForms.OfType<MyForm>().FirstOrDefault(); 
if (form != null) 
{ 
    form.Activate(); 
} 
else 
{ 
    new MyForm().Show(); 
} 
+0

如果我試圖打開已經打開的新表單,我想將任何表單集中在我的應用中。 –

+0

@ MichaelS.Willy:那麼運行這段代碼的線程是什麼?如果您沒有打開任何表單,流程還活着嗎?或者你真的*開始一個新的過程,並試圖在另一個過程中找到一個表單?因爲這是一個非常不同的問題。 –

+0

不適用於此進程的另一個進程,也不啓動另一進程。 –

相關問題