自定义MDI 子窗体的Layout方式
2009-02-21 12:15 dytes 阅读(2271) 评论(3) 编辑 收藏 举报MDI Form默认提供了4种Layout的方式。但有些情况下,这几种Layout的方式并不能满足需求。这时我们就需要自定义MDI子窗体的Layout方式,主要也就是手动设置子窗体的Size和Location属性。
在设置子窗体的Layout之前,我们先要找出子窗体的父容器的ClientSize,然后根据ClientSize的大小以及自己需要的Layout方式,设置子窗体的Size和Location属性。子窗体的父容器是谁呢?我第一次想当然的就认为是MDI的主窗体,于是就用childForm(一个子窗体)的ParentForm属性获得了主窗体的引用,然后获得它的ClientSize,但结果总是不让人满意,如下图。
原因在于主窗体的ClientSize指的是除了标题栏和边框外窗体的大小。而我们实际需要的是上图中间灰色部分的大小。这部分区域的大小如何获得呢?其实childForm还有一个Parent属性,它是一个MdiClient对象,该对象才是MDI子窗体的父容器,而MdiClient对象的Parent才是MDI主窗体。MDI主窗体,MdiClient和子窗体是层层包含的关系。
只有获取MdiClient对象的大小,才能设置出我们需要的Layout方式。下面这个方法获取ClientSize大小:
{
MdiClient client = childForm1.Parent as MdiClient;
return client.ClientSize;
}
得到ClientSize的大小后,我们就可以根据ClientSize的大小以及自己需要的Layout方式,设置子窗体的Location以及Size属性,如:
{
Size clientSize = this.GetMdiClientAreaSize();
childForm1.Size = new Size(clientSize.Width / 4, clientSize.Height / 4);
childForm1.Location = new Point(clientSize.Width/2-childForm1.Size.Width,clientSize.Height/2-childForm1.Size.Height);
childForm2.Size = childForm1.Size;
childForm2.Location = new Point(clientSize.Width / 2, clientSize.Height / 2 - childForm1.Size.Height);
childForm3.Size = new Size(clientSize.Width / 2, clientSize.Height / 4);
childForm3.Location = new Point(clientSize.Width/4,clientSize.Height/2);
}
效果如下图:
还可以自定义其他Layout方式,如:
点击这里下载示例代码。