使用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
由于您基本上是在传递一个类型,因此可以使该方法通用:
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的答案。
在这两个解决方案中,结果是如果同一类有更多的窗口,那么所有这些窗口都会打开。