函数来获取表单的实例

时间:2011-08-04 12:39:37

标签: c# forms casting

我想构建一个构建函数,它会返回一个已经存在的表单实例。

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,...

1 个答案:

答案 0 :(得分:5)

您可能希望从Form集合中找到指定类型的OpenForms。因此,您需要传入类型 - 您可以传入Type对象,也可以使方法通用,以便传入类型参数。在类型参数中发送的优点是您可以是类型安全的(返回您搜索的具体类型以备不时之需)。这是一个通用的解决方案:

private TForm getForm<TForm>()
    where TForm : Form
{
    return (TForm)Application.OpenForms.OfType<TForm>().FirstOrDefault();
}

注意,OfTypeFirstOrDefault是LINQ扩展方法,请确保导入System.Linq。 使用上面的方法,如下所示:

Form f = getForm<Form1>();