WinForm中    如何遍历窗体  然后关闭不需要的窗体?
一个主窗体有很多个子窗体的,如何遍历所有的窗体,最好是NAME,句柄神马的暂时不懂啊。然后我就可以关闭不需要的窗体。谢谢!遍历winform遍历窗

解决方案 »

  1.   

    如果是毫无关系的窗体,就用api的enumwindow去枚举,如果子窗体和主窗体有父子关系,比如子窗体的parent为主窗体,那么可以遍历主窗体的controls,找到类型为Form的
      

  2.   

    看来一下mono的源代码,竟然是直接用list把所有生成的窗体记录下来。然后遍历。。
      

  3.   


    有父子关系的,能写个例子么? 不会我用了Application.OpenForms集合。但是报错啊。有2种:
    (1)集合已修改;可能无法执行枚举操作。
    (2)索引超出范围。必须为非负值并小于集合大小。参数名: index
    怎么回事? 代码应该没有问题才对,执行的时候报错。是哪里有问题没注意到。
      

  4.   


    能写个例子吗?  我就是用的这个,不行啊,执行的时候报错

    你不能直接从集合中删除
    你可以这样
    foreach (var item in Application.OpenForms.Cast<Form>().ToList())
      

  5.   

                foreach (Form item in Application.OpenForms)
                {
                    string x = item.Name; 
                    if (x != "Form1" || x != "Form2")
                        item.Close();     
                }
    帮我看下,这样写有什么问题啊?
    foreach (var item in Application.OpenForms.Cast<Form>().ToList())是怎么在用
      

  6.   

    foreach (var item in Application.OpenForms.Cast<Form>().ToList())
    {
                    string x = item.Name; 
                     if (x != "Form1" || x != "Form2")
                         item.Close();   
    }
      

  7.   

    或者这么写:
    Application.OpenForms.Cast<Form>().Where(x => x.Name != "Form1" && x.Name != "Form2").ToList().ForEach(x => x.Close());
      

  8.   

    caozhy 版主我用了你写的方法,为什么把我所有窗体都关闭了呢?  我的Form1主窗体我不是写了不关的吗。问题在哪啊
      

  9.   

    用 && 也是不行的,把Form1也关了用你的第二种方法倒是实现了,就是我还看不懂,不知道会不会有其他问题
      

  10.   


    请问下  caozhy版主  你这样写,是使用的哪方面的知识啊,我下来去学习下啊
      

  11.   


    请问下  caozhy版主  你这样写,是使用的哪方面的知识啊,我下来去学习下啊
    lambda表达式,linq。
      

  12.   


    请问下  caozhy版主  你这样写,是使用的哪方面的知识啊,我下来去学习下啊
    lambda表达式,linq。 谢谢版主了哈。这个用到了LINQ? 居然没看出来呢
      

  13.   

    cast where tolist严格来说属于linq