当您多次单击一个按钮时,如何阻止打开多个表单
How do you stop multiple forms from opening when you click a button more than once
private void Button_Click_1(object sender, EventArgs e)
{
Form2.form = new Form2();
form.Show();
}
当你点击按钮两次时,弹出2个表格,我如何做到当你点击按钮两次时它摆脱已经打开的表格并单独打开表格。
我想要的例子:
点击按钮一次,打开Form2
点击按钮两次,关闭原来的Form2,单独打开另一个Form2
实际发生了什么:
点击按钮一次,打开Form2
点击按钮两次,原来的Form2还在打开,又打开了另一个Form2
您只需遍历每个打开的表单并检查表单的名称是否相同。请尝试以下操作:
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "form2") //Whatever the actual name of your form is
{
frm.Close();
}
}
Form2 form2 = new Form2();
form2.Show();
您可以构建一个简单的方法来验证您提供的类型的表单实例是否存在:如果存在,则关闭当前实例并生成相同类型的新实例:
private void OpenNew<T>() where T : Form, new()
{
var instance = Application.OpenForms.OfType<T>().FirstOrDefault();
if (instance != null) instance.Close();
new T().Show();
}
假设您仅使用特定按钮生成此类型的实例。
如果该 Type 的多个实例存在,出于某种原因,循环 Application.OpenForms.OfType<T>()
返回的集合(+ .ToArray()
以避免......好吧,没有它试试吧):
private void OpenNew<T>() where T : Form, new()
{
foreach (var instance in Application.OpenForms.OfType<T>().ToArray()) {
instance.Close();
}
new T().Show();
}
=> 您也可以将集合循环为:
Application.OpenForms.OfType<T>().ToList().ForEach(f => f.Close());
您可以调用这些方法中的任何一种(在您的上下文中使用您喜欢的方法:在显示一个新的、总是单一的实例或多个实例中的一个新实例之前,您可能需要做一些其他事情),例如, :
OpenNew<Form2>();
private void Button_Click_1(object sender, EventArgs e)
{
Form2.form = new Form2();
form.Show();
}
当你点击按钮两次时,弹出2个表格,我如何做到当你点击按钮两次时它摆脱已经打开的表格并单独打开表格。
我想要的例子:
点击按钮一次,打开Form2
点击按钮两次,关闭原来的Form2,单独打开另一个Form2
实际发生了什么:
点击按钮一次,打开Form2
点击按钮两次,原来的Form2还在打开,又打开了另一个Form2
您只需遍历每个打开的表单并检查表单的名称是否相同。请尝试以下操作:
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == "form2") //Whatever the actual name of your form is
{
frm.Close();
}
}
Form2 form2 = new Form2();
form2.Show();
您可以构建一个简单的方法来验证您提供的类型的表单实例是否存在:如果存在,则关闭当前实例并生成相同类型的新实例:
private void OpenNew<T>() where T : Form, new()
{
var instance = Application.OpenForms.OfType<T>().FirstOrDefault();
if (instance != null) instance.Close();
new T().Show();
}
假设您仅使用特定按钮生成此类型的实例。
如果该 Type 的多个实例存在,出于某种原因,循环 Application.OpenForms.OfType<T>()
返回的集合(+ .ToArray()
以避免......好吧,没有它试试吧):
private void OpenNew<T>() where T : Form, new()
{
foreach (var instance in Application.OpenForms.OfType<T>().ToArray()) {
instance.Close();
}
new T().Show();
}
=> 您也可以将集合循环为:
Application.OpenForms.OfType<T>().ToList().ForEach(f => f.Close());
您可以调用这些方法中的任何一种(在您的上下文中使用您喜欢的方法:在显示一个新的、总是单一的实例或多个实例中的一个新实例之前,您可能需要做一些其他事情),例如, :
OpenNew<Form2>();