我想构建一个构建函数,它会返回一个已经存在的表单实例。
fx = getForm(Form1);
这里我得到错误'FensterTest.Form1'是'类型'但是像'变量'一样使用 所以我需要一些演员,但我不知道我需要演员。
private Form getForm(Form f)
{
foreach (Form a in Application.OpenForms)
{
if (a is f)
{
f fx = (f)a;
return fx;
}
}
return null;
}
无论我在哪里使用“f”,我都会得到“未找到类型或命名空间名称'f'”
“f fx =(f)a;”以前是“Form1 fx =(Form1)a”;并且工作得很好,但因为我也需要使用Form2 Form3,...
答案 0 :(得分:5)
您可能希望从Form
集合中找到指定类型的OpenForms
。因此,您需要传入类型 - 您可以传入Type
对象,也可以使方法通用,以便传入类型参数。在类型参数中发送的优点是您可以是类型安全的(返回您搜索的具体类型以备不时之需)。这是一个通用的解决方案:
private TForm getForm<TForm>()
where TForm : Form
{
return (TForm)Application.OpenForms.OfType<TForm>().FirstOrDefault();
}
注意,OfType
和FirstOrDefault
是LINQ扩展方法,请确保导入System.Linq。
使用上面的方法,如下所示:
Form f = getForm<Form1>();