formA中有一个panelA,panelA用来显示formB中的内容。formB中一个panelB,panelB中有一个datagridviewB
问题:在formA中点击窗体最大化后,要如何使panelA中的窗体formB也样也放大,而且datagridviewB也对应放大?在实际开发中,formB中的控制肯定不光只有datagridviewB,还有很多很多其它控件。

解决方案 »

  1.   

    设计上存在问题啊,如果要做成窗口的包含,你应该使用MDI窗口模式
      

  2.   


    private void button3_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.TopLevel = false;
        f2.Show();
        panel1.Controls.Add(f2);
        f2.WindowState = FormWindowState.Maximized;  //这样子窗体跟着panel1变化.
    }
    另外: 
        panel1.Dock = DockStyle.Fill;      //或 DockStyle.Left等和容器一块变化的参数
        dataGridView.Dock = DockStyle.Fill;   //或 DockStyle.Left等和容器一块变化的参数
      

  3.   

    有办法补救吗?要是使用MDI窗口模式,就可以实现?
      

  4.   

    panel内放窗体与是不是MDI窗体无关,只要把子窗体属性设置TopLevel = false即可.
      

  5.   


    嗯,MDI模式就可以实现,你将现在要放置FormB的Panel移走,那个位置就空下来了,此时打开的MDIForm就会利用那个空白部分填充进去,你只要设置为窗口最大化,那么就可以跟着父窗口一起变了。
      

  6.   

    另外如果在Panel里放置窗口的话,那还不如直接放置控件呢,感觉无意义。MDI窗口就不一样了,可以多开,可以关闭。
      

  7.   

    设置panelA的anchor,让panelA随着窗口大小变化而变化的,
    当formA窗口大小变化的时候,重新设置fromB窗口的大小size
    private void FormA_SizeChanged(object sender, EventArgs e)
            {
                formB.Size = new Size(ClientRectangle.Width - 4 - panelLeft.Width, ClientRectangle.Height - panelTop.Height - 2- panelBottom.Height);
            }
      

  8.   

    提醒了我,实际应用中,formA中有四个按钮,点击不同的按钮在panel中显示不同的form,要如何实现?
      

  9.   

    我也按这种方式做过,formB的窗口是放大了,但formB中的datagridview没有放大,实际应用中formB有很多其它控件。
      

  10.   

    这个问题刚好前几天碰到过,也费了好大力气才改好
    将一个FORM作为一个容器的子控件,有几个要点
    1、Form.TopLevel = false;
    2、Form.WindowState = FormWindowState.Normal;  //这个最重要,如果最大化的话,那么容器大小变化了,窗体不会自动变化,因为已经最大化了吗,还有什么好变大小的
    3、Form.Dock = System.Windows.Forms.DockStyle.Fill;  //或者使用Form.Anchor来锚定
    4、去掉标题栏,如果不去掉,用户可以移动子窗体或者双击标题栏调整大小,一调整大小后,容器大小变化后,子窗体也不会跟着变化大小,这时候要将容器大小改变的事件(SizeChanged)中增加代码,设置Form.WindowState = FormWindowState.Normal;
    5、子窗体内部各控件的位置及大小应该使用Dock和Anchor属性来调整
    private void button3_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.TopLevel = false;
        f2.Show();
        panel1.Controls.Add(f2);
        f2.Dock = System.Windows.Forms.DockStyle.Fill;
        f2.WindowState = FormWindowState.Normal;  //这样子窗体跟着panel1变化.
    }
      

  11.   

    试了你的做法,formB是跟随放大了,但formB中的datagridview却没有跟随放大,当然还有其它更多的控件。
      

  12.   

    不需要贴代码了吧,
    显示窗体的注意点已经讲过
    你可能需要了解一下Dock和Anchor这两个属性的作用
    几乎所有控件都有这两个属性
    就是用来动态调整控件大小及位置的
      

  13.   

    楼主朋友,窗体的Anchor属性对你这个问题是非常关键的,应该可以完全解决你窗体上所有的控件的大小位置变化的摆放,设置这个属性不需要更改代码的!
      

  14.   

    好好的用一下dock和Anchor这两个属性基本上就够了,不用别的了。
      

  15.   

    把datagridview的Anchor属性设置成了:Top, Bottom, Left, Right  可还是不行。
      

  16.   


    已经提醒楼主了:
    dataGridView.Dock = DockStyle.Fill;  //或 DockStyle.Left等和容器一块变化的参数
      

  17.   

    把datagridview的Anchor属性设置成了:Top, Bottom, Left, Right后,点击formA最大化,formB跟随最大化了,再点击formA为正常显示时,formB显示就有问题了。
      

  18.   

    panel1中还有其它很多控件,若设置dataGridView.Dock = DockStyle.Fill,其它的控件显示都会出现问题。