C# 如何检查窗口是否打开和关闭
我正在开发C#winforms 我有一个函数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(); 但当我再次调用它时,会打开一个新窗口,而我以前的窗口也会打开。我必须手动关闭那个窗口 是否有任何方法可用,如
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();