使用IS运算符来识别Form的类型

本文关键字:Form 类型 识别 IS 运算符 使用 | 更新日期: 2023-09-27 18:23:52

我想写一个通用方法,检查表单是否已经打开。如果它是打开的,那么就激活它。否则就显示它。现在我的挑战是,我应该把什么类型的参数传递给Test方法?

private void Test(?? ??)
        {
            bool isFormOpen = false;
            foreach (Form form in Application.OpenForms)
            {
                if (form is ??)
                {
                    isFormOpen = true;
                    form.Activate();
                }
            }
            if (!isFormOpen)
            {
            }
        }

谢谢Nishant

使用IS运算符来识别Form的类型

由于您基本上是在传递一个类型,因此可以使该方法通用:

private void ActivateIfOpen<T>() 
{ 
    foreach (Form form in Application.OpenForms) 
    { 
        bool isFormOpen = false; 
        if (form is T)
        {
            isFormOpen = true; 
            form.Activate(); 
        }
    } 
    ...
}
// call like this
ActivateIfOpen<MyMainForm>();

我会选择这样的东西

    private void Test<TForm>()
       where TForm : Form
    {
        TForm form = Application.OpenForms.OfType<TForm>().SingleOrDefault();
        if (form != null)
        {
        }
     }

您可以使用这样的Generic方法:

private static void Test<T>()
    where T : Form
{
    foreach (Form f in Application.OpenForms)
    {
        if (f is T)
        {
        }
    }
}

或者您可以将表单的类型转换为方法

private static void Test(Type formType)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.GetType() == formType)
        {
        }
    }
}

另一件事是Application.OpenForms还有一个index[string name]参数。因此,如果您不想使用类型来识别表单,也可以使用以下命令通过名称来识别表单:Application.OpenForms["myFormName"]

编写代码的方式需要传递相应Form类的Type。。。

           if (form.GetType() == theTypeParam)
            {
                isFormOpen = true;
                form.Activate();
            }

另一种选择是使用泛型——请参阅Heinzi的答案。

在这两个解决方案中,结果是如果同一类有更多的窗口,那么所有这些窗口都会打开。