有谁知道我怎么知道Windows窗体应用程序(C#)是打开还是客户端关闭它?
(在我的应用程序中,我有一个Windows窗体应用程序(Form1),允许用户打开另一个窗体(Form2)。我想知道Form2是打开还是关闭。)
我需要知道,因为我从一个线程运行Form2,我想让线程runnig直到用户关闭Form2。
非常感谢!
答案 0 :(得分:3)
您可以检查您的应用程序中是否打开了给定类型的表单(使用LINQ):
if (Application.OpenForms.OfType<Form2>().Count() > 0)
{
// there is an instance of Form2 loaded
}
答案 1 :(得分:0)
您需要详细说明您的问题。您是在谈论从其他应用程序监控应用程序吗?或者一个表格需要知道另一个表格是否开放?或者表格需要知道另一个表格什么时候关闭?
有几种方法可以监控在同一个应用程序中关闭的表单。
在您的表单上调用ShowDialog()
而非Show()
将确保ShowDialog()
调用后的代码无法执行,直到用户关闭该表单。
Form类有一个Visible
属性,根据表单是否可见返回true / false。
对于应用程序本身,静态ApplicationExit
类上有一个Application
事件,它在应用程序关闭之前被调用,因此您可以监听该事件,例如,如果您需要退出时进行一些清理。
答案 2 :(得分:0)
如果您只想运行单个应用程序实例,请检查this链接。
在那里,您还将看到如何检查进程是否仍处于活动状态。
答案 3 :(得分:-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>();