2010-03-18 69 views
0

有誰知道我怎麼知道Windows窗體應用程序(C#)是否打開或客戶機關閉了它?我想知道Form2是打開還是關閉。)
我需要知道,因爲我運行了一個窗體應用程序(Form1),允許用戶打開另一個窗體(窗體2)。從一個線程的Form2,我想讓線程runnig直到用戶關閉Form2。
非常感謝!如何知道表單應用程序是否打開c#

+0

確定在同一臺機器內? – thelost 2010-03-18 11:16:16

+0

您是否在申請結束時查找活動? – Codesleuth 2010-03-18 11:16:35

回答

0

你需要詳細闡述你的問題。你在談論從另一個應用程序監視應用程序嗎?或者一種形式需要知道另一種形式是否開放?或者一個表單需要知道另一個表單何時關閉?

有幾種方法可以監視在同一個應用程序中關閉的表單。

呼喚你的形式,而不是Show()ShowDialog()將確保遵循ShowDialog()調用代碼沒有得到執行直到用戶關閉形式。

Form類具有Visible屬性,該屬性根據表單是否可見返回true/false。

至於應用程序本身,有一個ApplicationExit事件上的靜態Application類被離應用程序之前調用關閉,所以如果,例如,你需要在退出時執行一些清理工作,你可以聽那個事件。

0

如果您只想運行單個應用程序實例,請檢查this鏈接。
在那裏您還會看到如何檢查進程是否仍處於活動狀態。

3

您可以檢查一個給定類型的形式是在應用程序中所示(使用LINQ)開放:

if (Application.OpenForms.OfType<Form2>().Count() > 0) 
{ 
    // there is an instance of Form2 loaded 
} 
-1

如果你的意思是其子窗體MDI應用程序:

private Dictionary<Type, Form> SingleInstanceForms = new Dictionary<Type, Form>(); 

public Form ActivateForm<T>() where T : Form, new() 
{ 
    Cursor.Current = Cursors.WaitCursor; 

    if (!this.SingleInstanceForms.ContainsKey(typeof(T))) 
    { 
     T newForm = new T(); 
     //setup child 
     newForm.MdiParent = this; 
     newForm.WindowState = FormWindowState.Maximized; 
     //newForm.Icon = Icon; 

     newForm.FormClosed += new FormClosedEventHandler(delegate(object sender, FormClosedEventArgs e) 
     { 
      this.SingleInstanceForms.Remove(sender.GetType()); 
     }); 

     this.SingleInstanceForms.Add(typeof(T), newForm); 

     newForm.Show(); 
     this.Refresh(); 
    } 

    Form formToActivate = this.SingleInstanceForms[typeof(T)]; 
    formToActivate.Activate(); 

    Cursor.Current = Cursors.Default; 

    return formToActivate; 
} 

這將創建表單子,如果尚未創建,並且在創建時激活它。

示例:ActivateForm<dlgChildOne>();

+0

-1:此功能內置於WinForms。請參閱Application.OpenForms集合:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms.aspx – Juliet 2010-03-18 13:18:38

+0

@juliet你是什麼意思?這是關於Application.OpenForms ... – 2010-03-18 16:59:22

相關問題