0

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

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

4

5 回答 5

1

您可以使用我的方法获取任何活动表单:

public static Form IsFormAlreadyOpen(Type FormType)
{
   foreach (Form OpenForm in Application.OpenForms)
   {
      if (OpenForm.GetType() == FormType)
         return OpenForm;
   }

   return null;
}
于 2012-06-05T05:24:11.837 回答
0

在我看来,您正在尝试将 Form1 作为静态实例访问,除非您以这种方式创建 Form1,否则您将无法访问它,这可能就是您从函数中获取 NULL 值的原因。如果你想从 Form2 中引用 Form1,那么你需要给它传递一个引用。

表格1:

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 引用它。

于 2012-06-05T05:21:24.990 回答
0

如果您的意思是运行“仍在内存中”,那么您可以

  • 只需测试对表单的引用:if(form1 != null)

  • 之后,您可以测试是否被隐藏:if(form1.Visible)

  • 并可能最小化:if(form1.WindowState != FormWindowState.Minimized)

于 2012-06-05T05:25:05.800 回答
0

如果您想检查您的表单是否已关闭(并因此被丢弃),您可以尝试从该表单调用一个方法并捕获ObjectDisposedException.

try 
{ 
    Form1.SomeMethod();
} 
catch (ObjectDisposedException ex) 
{ 
    // Form has been closed
} 

如果表单尚未关闭,并且您想检查它是否可见,则可以使用它的“可见”属性

于 2012-06-05T05:28:00.643 回答
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;
        }
于 2012-06-05T05:39:47.083 回答