防止表单多次显示

时间:2012-10-08 04:00:33

标签: c# winforms

在Windows窗体(c#)中,当用户点击按钮时,我正在显示一个表单,用户可以看到工作正常,但是如果用户再次点击同一个按钮,则同一个表单再次打开两个表单正在显示。有什么方法可以防止这种情况,请给我任何参考,谢谢。这是我的代码......

private void button1_Click(object sender, EventArgs e)
{
  Form2 obj = new Form2();
  obj.Show();
}

6 个答案:

答案 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();将解决此问题