函数获取窗体的实例

本文关键字:实例 窗体 获取 函数 | 更新日期: 2023-09-27 18:04:24

我想构建一个构建一个函数,它返回给我一个已经存在的窗体实例。

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

函数获取窗体的实例

您可能希望从特定类型的OpenForms集合中找到Form。所以你需要传入类型——你可以传入一个Type对象,或者你可以使这个方法泛型,这样你就可以传入一个类型参数。发送类型参数的好处是可以实现类型安全(在需要时返回您搜索的具体类型)。下面是一个通用的解决方案:

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

注意,OfTypeFirstOrDefault是LINQ的扩展方法,确保你导入了System.Linq。像这样使用上面的方法:

Form f = getForm<Form1>();