formA中有一个panelA,panelA用来显示formB中的内容。formB中一个panelB,panelB中有一个datagridviewB
问题:在formA中点击窗体最大化后,要如何使panelA中的窗体formB也样也放大,而且datagridviewB也对应放大?在实际开发中,formB中的控制肯定不光只有datagridviewB,还有很多很多其它控件。
问题:在formA中点击窗体最大化后,要如何使panelA中的窗体formB也样也放大,而且datagridviewB也对应放大?在实际开发中,formB中的控制肯定不光只有datagridviewB,还有很多很多其它控件。
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等和容器一块变化的参数
嗯,MDI模式就可以实现,你将现在要放置FormB的Panel移走,那个位置就空下来了,此时打开的MDIForm就会利用那个空白部分填充进去,你只要设置为窗口最大化,那么就可以跟着父窗口一起变了。
当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);
}
将一个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变化.
}
显示窗体的注意点已经讲过
你可能需要了解一下Dock和Anchor这两个属性的作用
几乎所有控件都有这两个属性
就是用来动态调整控件大小及位置的
已经提醒楼主了:
dataGridView.Dock = DockStyle.Fill; //或 DockStyle.Left等和容器一块变化的参数