2010-03-18 95 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

相关问题