【问题标题】:how to check if a non-modal dialog is already launched如何检查非模态对话框是否已经启动
【发布时间】:2013-12-06 05:16:48
【问题描述】:

我的应用程序在单击按钮时会启动一个非模态对话框。如果用户再次单击该按钮,我想检查该表单是否已经在运行并想知道它是否可能?

【问题讨论】:

    标签: c# .net winforms .net-3.5 non-modal


    【解决方案1】:

    您可以使用Application.OpenForms Property

    if (Application.OpenForms.OfType<YourNonModalFormType>().Any())
       // one is already opened
    

    如果您想关闭此表单:

    var form = Application.OpenForms.OfType<YourNonModalFormType>().FirstOrDefault();
    if (form != null)
    {
        // launched
        form.Close();
    }
    

    【讨论】:

    • 谢谢。如果它已经启动了,我可以通过这种方式关闭它吗?
    • 实际上我使用的是 .net 3.5。似乎它不能在我的代码中使用。还有其他方法吗?
    • 我想我总是可以遍历 Application.OpenForms 集合并将其类型与我的非模态表单类型进行比较
    • 您只是缺少using System.Linq; 吗?
    • @PaulSnow 是的,抱歉很忙。是的,sgmoore 是对的 - LINQ 从 .NET 3.5 开始就可用
    【解决方案2】:

    另一种方法是手动声明一个变量来跟踪您的表单实例:

    public partial class Form1 : Form
    {
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private Form2 f2 = null;
    
        private void button1_Click(object sender, EventArgs e)
        {
            if (f2 == null || f2.IsDisposed)
            {
                f2 = new Form2();
                f2.Show();
            }
            else
            {
                f2.Close();
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-10
      • 2021-06-21
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多