for (int i=0;i<Application.OpenForms.Count;i++)
             {
//MessageBox.Show(Application.OpenForms[i].Name.ToString());
if(Application.OpenForms[i].Name =="Jiben")
                {
MessageBox.Show(Application.OpenForms[i].Name.ToString());
                 Application.OpenForms[i].Close();
                }
            }
我想把基本form 关闭 打开应用程序后,第一次可以关闭,在调用的时候就 不起做作用了,什么原因?大家帮我分析下

解决方案 »

  1.   

    我测试了一下,在for里弹出的窗口名称是对的,但是if里的窗口名是空的,再研究下
      

  2.   

    Form[] f = Application.OpenForms;//获取子窗体
        foreach (Form f1 in f)//遍历子窗体
        {
            if (f1!=null && f1 is Form2)//如果是Form2
                f1.Close(); 
        }
      

  3.   

    更改一下Foreach(Form f in Application.OpenForms){
    if(f is Form2){
    f.close();
    break;
    }
    }
      

  4.   

    改成这个试试:for (int i=0;i<Application.OpenForms.Count;i++)
    {
    //MessageBox.Show(Application.OpenForms[i].Text.ToString());
    if(Application.OpenForms[i].Text.ToString()=="Jiben")
    {
    MessageBox.Show(Application.OpenForms[i].Text.ToString());
    Application.OpenForms[i].Close();
    }
    }
      

  5.   

    上面的只能在找到窗体后break,否则会有异常,因为Application.OpenForms并不能同步更新。
      

  6.   

                textBox1.Text = Application.OpenForms.Count.ToString();
                for (int i = 0; i < Application.OpenForms.Count; i++)
                {
                    if (Application.OpenForms[i].Text.ToString() == "Form2")
                    {
                        Application.OpenForms[i].Close();
                        textBox1.Text = Application.OpenForms.Count.ToString();
                    }
                }
            }
    实测好用其中textBox1记录的是打开窗体的数量,监视程序运行是否正常的
      

  7.   

    唉,我的渺小啊!
    foreach(Form f in Application.OpenForms)
    {
     if(f is Form2){
    f.close();
    break;
    }
    }
      

  8.   


    不知道你是怎么操作的,我测试的是一个窗体放了4个按钮,打开4个窗体,主窗体还有一个关闭按钮,点击关闭按钮关闭名称为Form2的窗体,测试好用。
      

  9.   

    加了break没事的。你的我试是好用的,不知道LZ具体是什么情况…
      

  10.   

    调试了下发现,在form.close之后,Application.OpenForms这个集合就少了1.
    比如你打开两个子窗体,跟主窗体共Application.OpenForms=3个,i=0; 
    关闭一个后,Application.OpenForms=2, i++, for循环不满足条件,退出。这种问题比较常见的,在 遍历集合的时候增加或删除集合的元素,要特别小心。
      

  11.   

    解决办法,又重循环,当修改集合后,重新循环,有更好办法的,可以拿出来分享下。
    while(true)
                {
                    int i = 0;
                    for (; i < Application.OpenForms.Count; i++)
                    {
                        if (Application.OpenForms[i] is Form2)
                        {
                            Application.OpenForms[i].Close();
                            break;
                        }
                    }
                    if( i==Application.OpenForms.Count) break;
                }
      

  12.   

    是我的窗体 没有关闭 ,调用close() 没有关掉本来我关掉窗口后 又重新初始化这个窗体,
    我在 窗体的 关闭事件里加了关线程的方法,因为我要重新初始化我的线程,必须先关闭原来的线程,
      

  13.   

    for (int i=0;i<Application.OpenForms.Count;i++)
    {
    if(Application.OpenForms[i].Name = "Jiben")
    {
    MessageBox.Show(Application.OpenForms[i].Name.ToString());
    Application.OpenForms[i].Close();
    break;\\加个跳出循环看看
    }
    }
      

  14.   

    for (int i=Application.OpenForms.Count-1;i>=0;i--)
    {
    if(Application.OpenForms[i].Name = "Jiben")
    {
    MessageBox.Show(Application.OpenForms[i].Name.ToString());
    Application.OpenForms[i].Close();
    }
    }