首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

父窗体中加入一个Panel,然后将要弹出的窗体作为Panel的控件显示到Panel下

2013-03-04 
父窗体中加入一个Panel,然后将要弹出的窗体作为Panel的控件显示到Panel上以下的代码中,点击Button1可以实

父窗体中加入一个Panel,然后将要弹出的窗体作为Panel的控件显示到Panel上
以下的代码中,点击Button1可以实现把form2嵌入到form1中的panel1中,而点击Button2先清除panel1中可能有的控件,然后将form3嵌入panel1中。但怎样才能实现模拟点击关闭panel1中的嵌入的窗体,而不是用panel1.Controls.Clear();这样仅仅是清除掉嵌入的窗体。应该如何写代码呢?谢谢!

private void button1_Click(object sender, EventArgs e) //把form2嵌入form1中的panel1
        {
            Form2 aa = new Form2();
            //aa.FormBorderStyle = FormBorderStyle.None;
            aa.TopLevel = false;
            this.panel1.Controls.Add(aa);
            aa.Show();

        }        
        private void button2_Click(object sender, EventArgs e)
        {
            this.panel1.Controls.Clear();
            Form3 aa2 = new Form3();
            //aa2.FormBorderStyle = FormBorderStyle.None;
            aa2.TopLevel = false;
            this.panel1.Controls.Add(aa2);
            aa2.Show();            
        }
[解决办法]
            foreach (Control ctrl in this.panel1.Controls)
            {
                if (ctrl is Form)
                {
                    ctrl.Dispose();
                }
            }
[解决办法]


        void button1_Click(object sender, EventArgs e) //把form2嵌入form1中的panel1
        {
            this.panel1.Controls.Clear();
            Form2 aa = new Form2();
            //aa.FormBorderStyle = FormBorderStyle.None;
            aa.TopLevel = false;
            this.panel1.Controls.Add(aa);
            aa.Show();

            foo(aa);


        }

        void button2_Click(object sender, EventArgs e)
        {
            this.panel1.Controls.Clear();
            Form3 aa2 = new Form3();
            //aa2.FormBorderStyle = FormBorderStyle.None;
            aa2.TopLevel = false;
            this.panel1.Controls.Add(aa2);
            aa2.Show();

            foo(aa2);
        }

        void foo(Form f)
        {
            f.ParentChanged += (sender, args) =>
            {
                if (f.Parent == null)
                    f.Close();
            };
        }


[解决办法]
你嵌入的窗体有名字,用Panel1.Controls.Find()找到你要的窗体,然后Panel1.Controls.RemoveByKey()
[解决办法]
遍历子控件,关闭之

热点排行