winforms c#如何检测打开的表单[重复]

3mpgtkmj  于 2023-06-24  发布在  C#
关注(0)|答案(3)|浏览(105)

此问题已在此处有答案

Application.OpenForms.Count = 0 always(2个答案)
5年前关闭。
我正试图用这段代码检测C#中打开的窗体;

if ((Application.OpenForms["Form1"] as Form1) != null)
{
    Application.OpenForms["Form1"].Close();
}

但我的表单有ShowInTaskBar = false,代码不工作。
如果窗体具有属性ShowInTaskBar = false,如何检测打开或关闭的窗体?

ohtdti5x

ohtdti5x1#

你需要做的是得到应用程序级的get表单,可以做如下。

FormCollection openforms = Application.OpenForms;
foreach (Form form in openforms)
{
    if (form.Name == "frmsomething")
    {
        form.Close();
    }
    // Whatever you want do with individual forms in form object
}
bmvo0sr5

bmvo0sr52#

问题似乎是ShowInTaskBar = false导致.NET忽略打开的表单列表中的表单。但是,您可以使用Windows API将表单设置为不显示在任务栏中,如int this SO answer所述。

qacovj5a

qacovj5a3#

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

private void btn2_Click(object sender, EventArgs e)
    {
        if(form != null && !form.IsDisposed){
              form.Close();
        }
    }

相关问题