已知有三个窗体,分别为 Form1(主窗体)、Form2、Form3;
Form1中包含button1和splitContainer1(左右型,splitContainer1.panel1、splitContainer1.panel2)两个控件;
Form2中包含button2控件;如下图:当点击Form1中的button1时,在splitContainer1.panel1中显示Form2,然后点击Form2中的button2,在
splitContainer1.panel2中显示Form3,请问能否实现?(类似bs结构中的Frameset架构)

解决方案 »

  1.   

    把相应的点击事件写好,之后Controls.add()或者设为可见不可见都行。
      

  2.   


    thanks to xs8577:
    能否给点代码?
      

  3.   

    难点在于:当击form2的button2时,无法捕捉到form1中的splitContainer1控件?
      

  4.   

    你的是动态生成的splitContainer还是直接拖上去的?
    直接拖上去的话,直接写button2事件,在里面就可以访问到splitContainer1啊
      

  5.   


    splitContainer1是直接拖上去,隶属于form1的控件
      

  6.   

    那在button2点击事件中写个Form3 form3 = new Form3();
    form3.Dock = DockStyle.Fill;
    splitContainer1.Panel2.Controls.Add(form3);
    应该没问题吧?
      

  7.   


    点击form1的button1时,可以实现在splitContainer1.panel1中显示form2,例如:        private void button1_Click(object sender, EventArgs e)
            {
               if (f2 == null)     //f2是form1的成员变量;
               {
                 f2 = new form2();                               
                 f2.TopLevel = false;
                 f2.FormBorderStyle = FormBorderStyle.None;
                 f2.Dock = DockStyle.Fill;
                 this.splitContainer1.Panel1.Controls.Add(f2);
                 f2.Visible = true;    
                 this.splitContainer1.Panel1.Controls.SetChildIndex(f2,0);
               }
               else
               {
                 this.splitContainer1.Panel1.Controls.SetChildIndex(f2,0);
               }
            }
    但是点击form2的button2时,却捕捉不到splitContainer1.panel2, 因为button2_Click是在form2发生,是form2的成员函数,而splitContain1.panel2是form1的成员
      

  8.   

    噢...忘记你的Form2是个另外的窗体了
    从Form2的父级访问Panel2试试
      

  9.   


    form2的父级好是splitContainer1.panel1
      

  10.   

    那就再父级一次,到主窗体的时候就 Find() splitContainer1出来,之后再访问Panel2
      

  11.   

    哈...我不知怎么找,简单写一点关于找上上级的splitContainer1,谢谢!!
      

  12.   


    SplitContainer sp = (SplitContainer)this.Parent.Parent.Controls.Find("splitContainer1", true)[0];
                sp.Panel2.Controls.Clear();
                sp.Panel2.BackColor = Color.Red;
    到底有几个Parent...你就自己看了
      

  13.   

    MSDN 上有详细示例,直接查看SplitContainer 的用法就OK
      

  14.   


                               
    f2.TopLevel = false; 
    不想每次都设置这个的话,直接把这个窗体的继承类从Form改成UserControl就可以了
      

  15.   

    你好,你虽然实现了你想要的功能但你有发现没?你在panel里显示的窗体原来的功能是否还都可以用?如果知道答案或者有兴趣的朋友加我QQ123581630,验证CSDN,谢谢了。(怎样让添加后的窗体原来的功能实现)