如何检查窗口是否打开并关闭它

时间:2011-08-30 08:44:42

标签: c# winforms forms singleton

我正在开发 C#winforms

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

打开ErrorForm
ErrorForm ew = new ErrorForm(Errors); // Errors is list<string>
ew.Show();

但是当我再次打电话时,会打开一个新窗口,我的上一个窗口也会打开。我必须手动关闭该窗口。

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

5 个答案:

答案 0 :(得分:2)

尝试这样的事情,伪代码 ..

public class MyClass 
{
    ErrorForm ew = null; 

    public void Validate() 
    {
       if(ew !=null && !ew.IsDisposed) 
          ew.Close(); 

       ew =  new ErrorForm(Errors);
       ew.Show();
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

最简单的解决方案是调用ew.ShowDialog(this),它将ErrorForm保存在主窗体之上。

如果您真的想调用Form.Show()方法,可以在ErrorForm中实现Singleton pattern并调用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();

    }

答案 3 :(得分:1)

试试这个:

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

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

答案 4 :(得分:0)

您可以使用 ShowDialog()