private void Button1(object sender,EventArgs e)
{
    f2=new Form2();
    f2.Show();
}private void Button2(object sender,EventArgs e)
{
    f2.Close();
}private void Button3(object sender,EventArgs e)
{
    if(f2!=null && f2.Created)
        f2.Close();
}当我点击button1多次,显示了多个Form2,但是当我点击button2或者button3时都只能关掉最后显示的那个Form2。
请问怎么对之前显示的Form2操作?
之前显示的Form2的名字已经不是f2了,是什么呢?

解决方案 »

  1.   

    使用IList<Form2> F2List =NEW IList<Form2>();private void Button1(object sender,EventArgs e) 
    {     Form2 f2=new Form2(); 
        f2.Show(); 
        F2List.Add(f2); 
    } private void Button2(object sender,EventArgs e) 

        F2List[F2List.Count-1].Close(); 
        F2List.RemoveAt(F2List.Count-1);

      

  2.   

    private void Button1(object sender,EventArgs e) 

        f2=new Form2(); 
        f2.Show(); 

    --------------------------
    if(f2==null)
      {
       f2=new Form2();
       }
     f2.Show();
      

  3.   

            Form2 fa = null;
            List<Form> listForms = new List<Form>();        private void button1_Click(object sender, EventArgs e)
            {
                fa = new Form2();
                fa.Show();
                listForms.Add(fa);
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (listForms.Count > 0)
                {
                    Form test = listForms[listForms.Count - 1];
                    test.Close();
                    listForms.RemoveAt(listForms.Count - 1);
                }
                else
                {
                    MessageBox.Show("无窗体打开!");
                }
            }
    只是 zgke 说的实现了一下,经过测试,正确.可控制索引值控制窗体; dancingbit 说的我试了一下不行.....
      

  4.   

    应该打开一个实例吧,打开那么多干嘛
    如果打开实例,就把打开的传给它,要不然就new一个
      

  5.   

    上面的方法都是可以的,都是用到了泛型,楼主也可以使用Form的数组来保存FORM2 只是不够泛型直接好用
      

  6.   

    1 2 楼难道是传说中的csdn抢分团
    这么快
      

  7.   

            #region MDI子窗体实例化一次
            /// <summary>
            /// 名称:CheckChildOpenState
            /// 功能:用子窗体的Name进行判断是否已实例化,如果存在则将他激活
            /// </summary>
            /// <param name="MdiForm">容器窗体</param>
            /// <param name="ChildForm">子窗体</param>
            public static void CheckChildOpenState(Form MdiForm, Form ChildForm)
            {
                foreach (Form tempChildForm in MdiForm.MdiChildren)
                {
                    if (tempChildForm.Name == ChildForm.Name.ToString())
                    {
                        if (tempChildForm.WindowState == FormWindowState.Minimized)
                        {
                            tempChildForm.WindowState = FormWindowState.Normal;
                        }
                        tempChildForm.Activate();
                        return;
                    }
                }
                ChildForm.MdiParent = MdiForm;
                ChildForm.Show();
            }
            #endregion
      

  8.   

    Form f2=null;private void Button1(object sender,EventArgs e) 

      if (f2==null) f2=new Form2(); 
        f2.Show();