2013-04-28 31 views

回答

3

調用Application.OpenForms會給你的所有打開的窗體的集合。您可以瀏覽每個打開的表單以檢查是否已經創建了子表單1。如果只是打電話給.Focus()的方法來提前。如果尚未創建,請按照原樣創建表單。

+0

這[這個答案](http://stackoverflow.com/a/3751748/17034)爲這樣做的麻煩。 – 2013-04-28 17:08:57

+0

感謝您的鏈接!不知道Application.OpenForms存在固有的問題。感謝您指出正確的方向。 :) – 2013-04-28 17:11:23

1

剛剛從你的類保持一個參考,而不是建立一個每次。

+0

但是如何第一個計劃帶來的窗口(使其活躍?) – Sergey 2013-04-28 16:27:42

+0

只需調用.Focus(); – 2013-05-02 21:33:56

1

不要使用無功,而不是你能做到這一點

fTicketTypes ticketTypeForm; 
//Some code goes here. 
if(ticketTypeForm == null) 
    ticketTypeForm = new fTicketTypes(); 
ticketTypeForm.Show(); 
+0

確保ticketTypeForm在事件處理程序代碼中可見,如果您想在某些事件上執行窗體打開。 – 2013-04-28 16:32:15

0

之前再出現了新的形式,檢查其已打開或不使用:

Application.OpenForms.OfType<YOUR_FORM_TYPE>().Any()) 

,如果它打開,忽略他的命令,但如果不再次打開它,你可以做到以下幾點:

ticketTypesForm myTicketTypesForm; 
    private void OpenDialog(object sender, EventArgs e) 
    { 
     if (!Application.OpenForms.OfType<ticketTypesForm>().Any()) 
     { 
      if (myTicketTypesForm == null) 
       myTicketTypesForm = new ticketTypesForm(); 
      myTicketTypesForm.Show(); 
     } 
     else 
     { 
      myTicketTypesForm.Focus(); 
     } 
    } 
0
  1. 如果它是確定你的應用程序使用的模態模式的子窗口(你不需要與父窗口的用戶交互),那麼只使用一個孩子莫代爾。窗口總是在最上面。

    var ticketTypesForm = new fTicketTypes(); ticketTypesForm.ShowDialog(this);

  2. 此外,當用戶關閉窗口時,您的應用程序還可以通過方法Hide()關閉子窗口。所以對話將永遠不會被處置。但在這種情況下,你必須使用ticketTypesForm(不是在創建新的每一個窗口打開時)

初始化應用程序或第一顯示

var ticketTypesForm = new fTicketTypes(); 

顯示

ticketTypesForm.Show(this); 
的同一個實例

close

ticketTypesForm.Hide();