如何检查Form对象是否在运行C#之前

时间:2012-06-05 05:14:55

标签: c# winforms

让我们说,我这里有2个WinForms,分别是Form1和Form2。然后我隐藏了Form1。我想知道如何在Form2中编写代码来检测Form1对象是否仍在运行。

我试图使用Form1.ActiveForm,但它似乎给了我NULL值。有更好的想法吗?谢谢。

5 个答案:

答案 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;
        }