我想写一个常用方法来检查表单是否已经打开。如果它是打开的,那么只需激活它。否则显示它。现在我的挑战是我将哪种类型的参数传递给Test方法?
private void Test(?? ??)
{
bool isFormOpen = false;
foreach (Form form in Application.OpenForms)
{
if (form is ??)
{
isFormOpen = true;
form.Activate();
}
}
if (!isFormOpen)
{
}
}
由于 NISHANT
答案 0 :(得分:7)
由于您基本上是在传递一个类型,因此您可以将该方法设为通用:
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>();
答案 1 :(得分:4)
我会选择像
这样的东西 private void Test<TForm>()
where TForm : Form
{
TForm form = Application.OpenForms.OfType<TForm>().SingleOrDefault();
if (form != null)
{
}
}
答案 2 :(得分:4)
你可以使用这样的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"]
答案 3 :(得分:1)
编写代码的方式需要传递相应Form类的Type
...
if (form.GetType() == theTypeParam)
{
isFormOpen = true;
form.Activate();
}
另一种方法是使用generice - 请参阅the answer from Heinzi。
答案 4 :(得分:0)
在两个解决方案中,结果是如果同一个类的窗口更多,则打开所有这些窗口。