2011-08-30 103 views
2

我正在致力于C#winforms如何检查窗口是否打开并关闭它

我有功能Validate()它存在于CS文件中。当我打电话功能Validate()它打开ErrorForm使用

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

但是,当我再次调用它,一个新窗口中打开和我以前的窗口打开了。我必须手动关闭该窗口。

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

回答

1

试试这个:

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

f1= new ErrorForm(Errors); 
f1.Show(); 
+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

您已经声明EW = null,因为中和每次调用ErrorForm时,ew变为null,并且在if()循环中ew.Close()不是得到执行... –

+0

@Sangram:变量ew被设置为Null一次,因为这是类成员。在此之后,它将永远不会变为空。如果不是你在谈论,请澄清。 – Tigran

+0

我明白了。 ew是从另一个班级调用的,这就是为什么它会起作用。你是对的。谢谢, –

1

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

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 {...} 
    } 
} 

在validate方法

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

    } 
+0

+1对于singngleton模式.. –

相关问题