[英]How to know if the Form App open or not c#
有誰知道我是否知道Windows窗體應用程序(C#)是打開的還是客戶端關閉了?
(在我的應用程序中,我有一個Windows窗體應用程序(Form1),該窗體允許用戶打開另一個窗體(Form2)。我想知道Form2是打開還是關閉。)
我需要知道這一點,因為我是從線程運行Form2的,並且我想使線程runnig直到用戶關閉Form2。
非常感謝!
您可以像這樣(使用LINQ)檢查是否在應用程序中打開了給定類型的表單:
if (Application.OpenForms.OfType<Form2>().Count() > 0)
{
// there is an instance of Form2 loaded
}
你需要更詳細地闡述你的問題。 您是在談論從另一個應用程序監視應用程序嗎? 還是一種形式需要知道另一種形式是否已打開? 還是一個表單需要知道其他表單何時關閉?
有兩種方法可以監視同一應用程序中的表單關閉。
在窗體上調用ShowDialog()
而不是Show()
將確保在用戶關閉窗體之前 ,不會執行ShowDialog()
調用之后的代碼。
Form類具有Visible
屬性,該屬性根據表單是否可見返回true / false。
對於應用程序本身,靜態Application
類上有一個ApplicationExit
事件,該事件在Application
程序關閉之前被調用,因此,例如,如果您需要在退出時執行一些清理操作,則可以監聽該事件。
如果只想運行單個應用程序實例,請檢查此鏈接。
在那里,您還將看到如何檢查進程是否仍處於活動狀態。
如果您的意思是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>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.