【问题标题】:c# How to Detect Opened Forms [duplicate]c#如何检测打开的表单[重复]
【发布时间】:2017-12-02 10:39:33
【问题描述】:

我正在尝试使用此代码检测 C# 中打开的表单;

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

但我的表单有ShowInTaskBar = false,我的代码不起作用。

如果表单具有属性ShowInTaskBar = false,我如何检测打开或关闭的表单?

【问题讨论】:

标签: c# .net winforms


【解决方案1】:

你需要做的是得到应用程序级别的获取表单,如下所示。

 FormCollection openforms = Application.OpenForms;

    foreach (Form frms in openforms)
    {
if (frms.Name=="frmsomething")
{
frms.close();
}

    //What ever you want do with individual forms in frms object
    }

【讨论】:

  • 感谢您快速重播,但它不起作用。如果表单属性是 ShowInTaskBar=false; openforms 计数为 0.i 更改属性 ShowInTaskBar=true; openforms 计数为 1。但此解决方案不适用于我
  • 我测试了它,即使 ShowInTaskBar=false 也很好,分享您的问题的更多细节,也许它来自其他地方......
  • 所以也许这是你的问题:stackoverflow.com/questions/3751554/…
  • 在研究问题和发现重复项方面做得很好。 @OnurKülekci 如果您在创建表单后设置 ShowInTaskBar 您会遇到该错误
  • @Steve 谢谢!解决了我的问题。你的评论解决了我的问题!
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2021-12-02
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多