在Application.OpenForms中的Foreach frmCustomForm

时间:2019-02-25 12:32:17

标签: c# winforms foreach

我正在尝试搜索打开的表单,以查找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无法对“方法组”进行操作。

1 个答案:

答案 0 :(得分:2)

由于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();