让我们说,我这里有2个WinForms,分别是Form1和Form2。然后我隐藏了Form1。我想知道如何在Form2中编写代码来检测Form1对象是否仍在运行。
我试图使用Form1.ActiveForm
,但它似乎给了我NULL值。有更好的想法吗?谢谢。
答案 0 :(得分:1)
您可以使用我的方法获取任何活动表单:
public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}
return null;
}
答案 1 :(得分:0)
在我看来,您正在尝试将Form1作为静态实例进行访问,除非您以这种方式创建Form1,否则您将无法访问它,这可能就是您从函数中获取NULL值的原因。如果你想从Form2引用Form1,那么你需要传递一个引用。
Form1中:
public class Form1
{
public Form1()
{
}
}
窗体2:
public class Form2
{
private Form1 _frm1;
public Form2(Form1 frm1)
{
_frm1 = frm1;
}
}
现在,当您创建Form2实例时,您将其声明为...
Form2 frm2 = new Form2(frm1);
其中frm1是Form1的实例。
现在,无论何时需要从Form2引用Form1,您都可以通过_frm1引用它。
答案 2 :(得分:0)
如果你的意思是“仍然在记忆中”,那么你可以
只需测试对表单的引用:if(form1 != null)
之后您可以测试是否隐藏:if(form1.Visible)
并可能最小化:if(form1.WindowState != FormWindowState.Minimized)
答案 3 :(得分:0)
如果您想检查表单是否已关闭(并因此处理),您可以尝试从该表单调用方法并捕获ObjectDisposedException
。
try
{
Form1.SomeMethod();
}
catch (ObjectDisposedException ex)
{
// Form has been closed
}
如果表单尚未关闭,并且您想检查表单是否可见,则可以使用"Visible" property
答案 4 :(得分:0)
private Form GetForm()
{
Form mdiParent = this.MdiParent;
Form1 objForm
foreach (Form frm in mdiParent.MdiChildren)
{
objForm = frm as Form1;
if (objForm != null)
{
objForm.Activate();
return objForm;
}
}
return null;
}