C# 使用IS运算符标识表单的类型

C# 使用IS运算符标识表单的类型,c#,reflection,C#,Reflection,我想写一个常用的方法来检查表单是否已经打开。如果它是打开的,那么只需激活它。否则,请展示它。现在我面临的挑战是,我应该将什么类型的参数传递给测试方法 private void Test(?? ??) { bool isFormOpen = false; foreach (Form form in Application.OpenForms) { if (form is ??)

我想写一个常用的方法来检查表单是否已经打开。如果它是打开的,那么只需激活它。否则,请展示它。现在我面临的挑战是,我应该将什么类型的参数传递给测试方法

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

            }
        }
谢谢
Nishant

编写代码的方式需要通过相应的表单类

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

另一种方法是使用generice-请参见。

由于基本上是传递类型,因此可以将该方法设置为generic:

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 ActivateIfOpen()
{ 
foreach(Application.OpenForms中的表单)
{ 
bool isFormOpen=false;
如果(表格为T)
{
isFormOpen=true;
form.Activate();
}
} 
...
}
//像这样打电话
激活teifopen();

我会选择类似

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

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

您可以使用以下通用方法:

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

另一件事是Application.OpenForms还有一个
索引[字符串名]
参数。因此,如果您不想使用该类型来标识表单,您也可以使用以下命令按名称标识表单:
Application.OpenForms[“myFormName”]

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

您能简要地给我看一下代码吗?这会很有帮助。如果打开了两个或多个相同表单类型的实例,此代码是否按预期工作?如果有两个或多个实例,则会引发异常,但这是我决定用户想要的行为,因为他说,如果已打开,则激活它,如果未打开,则创建它。似乎他是在用它作为一个守卫,以确保表单只有一个实例是打开的。
private static void Test(Type formType)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.GetType() == formType)
        {
        }
    }
}