3

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

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

7 回答 7

8

你最有可能做这样的事情:

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() 即可。

于 2012-10-08T04:05:41.953 回答
2
foreach (Form form in Application.OpenForms)
{
    if (form.GetType() == typeof(MyFormType))
    {
        form.Activate();
        return;
    }
}

Form newForm = new MyFormType();
newForm.MdiParent = this;
newForm.Show();

我尝试了多种方法来比较哪个更好。

但我认为这个解决方案一定比答案更好。

于 2017-06-06T09:24:35.493 回答
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;
    }
于 2012-10-08T04:06:27.987 回答
0

您很可能每次都在 Button 的 Click 处理程序中创建一个新的表单实例。

因此,您需要将 Form 对象的创建移到Button_Click.

于 2012-10-08T04:08:58.127 回答
0

解决问题的最简单方法是用 ShowDialog 替换 Show 命令,这样在防止表单显示两次时不会有任何问题

Form2 obj = new Form2();
obj.ShowDialog();

代码:.ShowDialog();是我们目前正在寻找的可以解决问题的代码

于 2020-08-09T04:23:44.483 回答
0

10 年后,喜欢乐队 :p 想分享对我有用的代码。没什么特别的,只是检查表单实例是否存在。另外,我不喜欢 ShowDialog,因为用户被“困”在那种形式中,我觉得它很烦人。用户可能想要检查其他来源的其他信息,例如在填写在线表格时需要复制粘贴字段信息。

private void button1_Click(object sender, EventArgs e)
{
 var obj = Application.OpenForms.OfType<Form2>().Select(t => t).FirstOrDefault();
 if (obj != null)
   {
      obj.BringToFront();
   }
 else
   {
      obj = new Form2();
      obj.Show();
   }
}
于 2022-02-21T09:32:05.840 回答
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();
        }
    }
}
于 2017-10-04T15:27:37.483 回答