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)
{
}
}
}