Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测打开的窗体_C#_.net - Fatal编程技术网

C# 检测打开的窗体

C# 检测打开的窗体,c#,.net,C#,.net,我在Form1中单击按钮打开Form2:Form2 f2=new Form2() 如果Form2已打开,再次单击Form1上的按钮将显示已打开的Form2。但是我希望Form2在已经打开的时候不要打开 当Form2关闭时,再次单击按钮,它应该显示Form2(因为Form2已关闭,即没有运行它的实例) 如何做到这一点 编辑: 我希望Form2在已打开时不应打开。您需要在第一个表单中创建一个字段,用于保存第二个表单的现有实例 例如: OtherForm form; void Something()

我在Form1中单击按钮打开Form2:
Form2 f2=new Form2()

如果Form2已打开,再次单击Form1上的按钮将显示已打开的Form2。但是我希望Form2在已经打开的时候不要打开

当Form2关闭时,再次单击按钮,它应该显示Form2(因为Form2已关闭,即没有运行它的实例)

如何做到这一点

编辑:
我希望Form2在已打开时不应打开。

您需要在第一个表单中创建一个字段,用于保存第二个表单的现有实例

例如:

OtherForm form;

void Something() {
    if (form == null)
        form = new OtherForm();
    form.Show();
}

您需要在第一个表单中创建一个字段,用于保存第二个表单的现有实例

例如:

OtherForm form;

void Something() {
    if (form == null)
        form = new OtherForm();
    form.Show();
}

除了答案,还要检查form.IsDisposed,这样你就有了答案

void Something() {
    if (form == null || form.IsDisposed)
        form = new OtherForm();
    form.Show();
}

此外,我还发现form.Activate()非常有用,这样您就可以在form中获得焦点了

除了SLaks答案之外,还可以检查form.IsDisposed,这样您就可以

void Something() {
    if (form == null || form.IsDisposed)
        form = new OtherForm();
    form.Show();
}

此外,我还发现form.Activate()的帮助信息,以便在表单中获得焦点。您还可以使用Application.OpenForms属性返回所有打开的windows表单的集合。您可以搜索此集合以查看Form1(或Form2)当前是否打开。

您还可以使用Application.OpenForms属性返回所有打开的windows窗体的集合。您可以搜索此集合,查看Form1(或Form2)当前是否打开。

  • 创造后的形式,
  • 将其放在前面的表单(如果应用程序位于后台,则刷新窗口标题)。这要求表单属性设置为true,但这是VisualStudio中的默认值

    private void ShowForm1(object sender, EventArgs e)
    {
        if (this.form1 == null)
        {
            this.form1 = new Form1();
            this.form1.Show(); 
        }
        else
        {
            this.form1.Activate();
        }
    }
    
      • 创造后的形式,
      • 将其放在前面的表单(如果应用程序位于后台,则刷新窗口标题)。这要求表单属性设置为true,但这是VisualStudio中的默认值

        private void ShowForm1(object sender, EventArgs e)
        {
            if (this.form1 == null)
            {
                this.form1 = new Form1();
                this.form1.Show(); 
            }
            else
            {
                this.form1.Activate();
            }
        }
        

      @SLaks我想这是今天第二次我看到你说海报应该命名他的表单:)@Denis:是的,但它是一个不同的用户(有一个非常相似的问题)@SLaks我想这是今天第二次我看到你说海报应该命名他的表单:)@Denis:是的,但它是一个不同的用户(有一个非常相似的问题)