我将一个窗体加载到 panel控件中,但是我如何关闭这个窗体呢?
我要在窗口的外部关闭它,不知如何做好?
再找个窗口的内部关闭它很容易,直接 this.close()就行了,但是,在窗口外部,如何通过代码关闭它呢?
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.TopLevel = false;
            frm.Parent = panel1;
            frm.Show();
        }
以上代码就是我将一个窗口加载到 panel 控件中的代码,
我有可能随时将不同的窗体,加载到 panel中,所以要关闭已经打开的窗体。

解决方案 »

  1.   

    如果panel1只有一个窗体那就  ((Form)panel1.Controls[0]).Close();
      

  2.   

    ((Form)(panel1.Controls[0])).Close();这样写看看!
      

  3.   

    我就是这样写的呀,关键是,我如何检测panel中是否已经加载了窗体了?
      

  4.   


    foreach (Control con in this.panel1.Controls)
                {
                    if (con is Form2)
                    {
                        Form2 t = con as Form2;
                        t.Close();
                    }
                }虽然这样可以。但是应该有更好的办法。
      

  5.   


    //加个判断就可以
    if(panel1.Controls.Count>0)
    {
      ((Form)panel1.Controls[0]).Close();
    }
      

  6.   

    if (panel1.Controls.Count>0)
    {
    //判断是否加载有子控件。
    }
      

  7.   

    这样符合你逻辑需求部?
            private Form2 f2;        private void button1_Click(object sender, EventArgs e)
            {
                f2 = new Form2();
                f2.TopLevel = false;
                f2.Parent = panel1;
                f2.Show();
            }        private void button2_Click(object sender, EventArgs e)
            {
                f2.Close();
            }
      

  8.   

    窗体左边的是导航条,根据导航的不同,在右边加载不同的窗体到 panel 控件。
    所以,panel 中加载的窗体的关闭,要通过左边的导航条进行控制。
      

  9.   

    这应该是往Panel里放个自定义控件,应该不是Form。
      

  10.   

    1.关闭panel里的控件 有现成的方法
    2.form声明成类内 方法外变量
      

  11.   

    找个地方保存当前的form,关闭后form置null,每次关闭判断form是否为null。
      

  12.   

    判定Panel内的窗体对象存在与否再决定是否关闭。
      

  13.   

    我也认为form应该作为一个成员,常驻而且也不一定要关闭啊,可能hide()还更好,这样不用每次都重新加载。如果form太多的话,要权衡一下了,吃内存。要设计优先关闭的,可以按打开时间顺序来调整
      

  14.   

    最好的方法是放UserControl,然后删除时用Remove.
    放FORM再关掉的话,要在Panel里声明一个变量,用来保存当前的窗口,如果会加载多个窗口那就用List<Form>,从外部关闭窗口后,清空变量或从List<Form>中移附对就的窗口
      

  15.   

    主窗体类中创建UserControl全局变量public static UserControl currentForm = new UserControl();  //全局变量,用于保存当前的视图
    在视图调取按钮事件上:            //若不存在则创建窗体
                if (currentForm.Name != "FormName")  // FormName为要加载的自定义控件的名称
                {
                 if (panel1.Controls.Count > 0)
                 {
                     panel1.Controls.RemoveAt(0);  //移除原有视图。此次可根据需要发挥。
                    }
                 currentForm = new FormMainDate();
                 currentForm.Dock = System.Windows.Forms.DockStyle.Fill;
                 this.panel1.Controls.Add(currentForm);
                 currentForm.Show();
              }