C# 如何检查窗口是否打开和关闭

C# 如何检查窗口是否打开和关闭,c#,winforms,forms,singleton,C#,Winforms,Forms,Singleton,我正在开发C#winforms 我有一个函数Validate(),它存在于CS文件中。当我调用函数Validate()时,它会使用 ErrorForm ew = new ErrorForm(Errors); // Errors is list<string> ew.Show(); ErrorForm ew=新的ErrorForm(错误);//错误列表 ew.Show(); 但当我再次调用它时,会打开一个新窗口,而我以前的窗口也会打开。我必须手动关闭那个窗口 是否有任何方法可用,如

我正在开发C#winforms

我有一个函数
Validate()
,它存在于CS文件中。当我调用函数
Validate()
时,它会使用

ErrorForm ew = new ErrorForm(Errors); // Errors is list<string>
ew.Show();
ErrorForm ew=新的ErrorForm(错误);//错误列表
ew.Show();
但当我再次调用它时,会打开一个新窗口,而我以前的窗口也会打开。我必须手动关闭那个窗口


是否有任何方法可用,如果我再次调用
validate()
,它将关闭当前的
ErrorForm
,并将打开新的
ErrorForm

尝试类似的方法,伪代码


您可以使用以下集合作为静态属性进行访问:
Application.OpenForms

最简单的解决方案是调用
ew.ShowDialog(this)
,它将ErrorForm保持在主窗体的顶部

如果确实要调用
Form.Show()
方法,可以在ErrorForm中实现并调用GetInstance。在GetInstance方法中,可以关闭或重用它

public class ErrorForm 
{
   private static ErrorForm instance;

   private ErrorForm() {}

   public static Singleton GetInstance()
   {
      if (instance == null)
      {
         instance = new ErrorForm();
      }
      else //OR Reuse it
      {
          instance.Close(); 
          instance = new ErrorForm();
      }
      return instance;      
   }

   public Errors ErrorMessages
   {
      set {...}
   }
}
在验证方法中

public void Validate() 
    {
       ErrorForm ef = ErrorForm.GetInstance();
       ef.ErrorMessages = errors;
       ef.Show();

    }

您可以使用ShowDialog()

试试这个:

var f1=Application.OpenForms["ErrorForm"];       
if(f1!=null) 
  f1.Close(); 

f1=  new ErrorForm(Errors);
f1.Show();

您已经声明了ew=null&因为每次调用ErrorForm时,ew都会变为null,并且在if()循环中ew.Close()不会被执行…@Sangram:变量ew只被设置为null一次,因为这是类成员。在此之后,它将永远不会变为空。如果不是你说的,请澄清,我明白了。ew是从另一个类调用的,这就是它工作的原因。你是对的。谢谢
var f1=Application.OpenForms["ErrorForm"];       
if(f1!=null) 
  f1.Close(); 

f1=  new ErrorForm(Errors);
f1.Show();