首页 > 解决方案 > Application.OpenForms 中的 Foreach frmCustomForm

问题描述

我正在尝试在打开的表单中搜索以查找特定类型的表单 [例如frmMain],Application.OpenForms以便我可以调用特定于该表单类型的函数

    foreach (frmMain mainForm in Application.OpenForms)
    {
        // code stuff
    }

当它找到正确的表单类型时,它会正确地做事,但是当它尝试其他类型的表单时,它不是不考虑它们而是试图通过它们,它说

无法将 Project.frmNotMain' 类型的对象转换为 'Project.frmMain' 类型。

如何阻止 foreach 尝试传递错误的表单?

我努力了

    foreach (frmMain mainForm in Application.OpenForms["frmMain"])

    foreach (frmMain mainform in Application.OpenForms.OfType<frmMain>)

两者都不起作用,因为 foreach 无法对“方法组”进行操作。

标签: c#winformsforeach

解决方案


因为OfType<T>是一个方法(不是属性()),所以当你想执行它时应该添加:

  foreach (frmMain mainform in Application.OpenForms.OfType<frmMain>()) {
    // code stuff
  }

如果您最多有一个实例frmMain(“main”通常表示“one” - 在许多形式中只有一个是“main”),您可以将循环简化为

  // Either instance of frmMain or null
  frmMain mainform = Application.OpenForms
    .OfType<frmMain>()      
    .FirstOrDefault();

推荐阅读