在Windows窗体(c#)中,当用户点击按钮时,我正在显示一个表单,用户可以看到工作正常,但是如果用户再次点击同一个按钮,则同一个表单再次打开两个表单正在显示。有什么方法可以防止这种情况,请给我任何参考,谢谢。这是我的代码......
private void button1_Click(object sender, EventArgs e)
{
Form2 obj = new Form2();
obj.Show();
}
答案 0 :(得分:5)
你最有可能做这样的事情:
void button1_OnClick(object sender, EventArgs e) {
var newForm = new MyForm();
newForm.Show();
}
因此,每次单击时,您都会显示表单的新实例。你想做这样的事情:
MyForm _form = new MyForm();
void button1_OnClick(object sender, EventArgs e) {
_form.Show();
}
这里只有一个要显示的表单实例,只是Show()它。
答案 1 :(得分:1)
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(MyFormType))
{
form.Activate();
return;
}
}
Form newForm = new MyFormType();
newForm.MdiParent = this;
newForm.Show();
我尝试的方法不仅仅是比较哪一个更好。
但我认为这个解决方案必须比答案更好。
答案 2 :(得分:0)
您可以尝试类似
的内容 private Form f;
private void button2_Click(object sender, EventArgs e)
{
if (f == null)
{
f = new Form();
f.Closed += f_Closed;
f.Show();
}
}
void f_Closed(object sender, EventArgs e)
{
f = null;
}
答案 3 :(得分:0)
您很可能每次都在Button的Click处理程序中创建表单的新实例。
所以你需要在Button_Click
之外移动Form对象。
答案 4 :(得分:0)
这是经过验证的解决方案的一个很好的例子 如果表单尚未打开,这将打开表单。 如果它已经打开,它会将它放在前台。
namespace MainProgram
{
public partial class Form1 : Form
{
private Form formNew = new FormToShowSomething();
private void button1_Click(object sender, EventArgs e)
{
formNew.Show();
formNew.Activate();
}
}
}
答案 5 :(得分:0)
解决问题的最简单方法是将Show命令替换为ShowDialog,这样一来,防止表单出现两次就不会出现任何问题
Form2 obj = new Form2();
obj.ShowDialog();
我们正在寻找的代码.ShowDialog();
将解决此问题