如何检查表单是否打开,如果打开则关闭表单?

5

如何检查表单是否已打开,并在打开时关闭表单?

我尝试了以下代码,但它一直说表单未打开,即使我知道它已经打开:

 foreach(Form a in Application.OpenForms) 
 {
     if (a is YouLikeHits_Settings) 
     {
         // About form is open
         MessageBox.Show("form open");
         break;
     }
     // About form is not open...
     MessageBox.Show("form not open");
     break;
 }
3个回答

20

Application.OpenForms 包含已打开的窗体。如果一个窗体在该集合中,则表示它已经打开,否则则是未打开(可能已关闭)。

if (Application.OpenForms.OfType<YouLikeHits_Settings>().Any())
    MessageBox.Show("Form is opened");
else
    MessageBox.Show("Form is not opened");

1
你的代码成功检测到它已经打开了 :)在弹出窗口显示该表单已打开后,有没有办法关闭特定的表单? - Edwin Torres
1
是的,你可以:Application.OpenForms.OfType<YouLikeHits_Settings>().First().Close() - Sergey Berezovskiy
我已经尝试过了,但我的表格无法自动关闭。 - aminvincent
@aminvincent 我认为你应该创建一个新的问题,包含所有与你的问题相关的信息和能够重现问题的代码。 - Sergey Berezovskiy
@SergeyBerezovskiy,感谢您的建议。最终我创建了一个新问题,并且这是我创建的链接,它解决了我的问题:http://stackoverflow.com/questions/35471376/close-messagebox-when-incoming-new-message/35471810?noredirect=1#comment58640277_35471810 - aminvincent
显示剩余3条评论

1

这肯定会起作用

            if (Application.OpenForms.OfType<frm_YouLikeHits_Settings>().Any())
            {
                Application.OpenForms.OfType<frm_YouLikeHits_Settings>().First().Close();
            }
            frm_YouLikeHits_Settings f1= new frm_YouLikeHits_Settings();
            f1.MdiParent = this;
            f1.Show();

0
try
{
    if (Application.OpenForms.OfType<talkForm>().Any())
    {
        talkForm frm = new talkForm();
        frm.Close();
        MessageBox.Show("Form is opened");
    }
    else
    {
        talkForm frm = new talkForm();
        frm.Show();
        MessageBox.Show("Form is not opened");
    }
}
catch(Exception ex)
{

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接