您的位置:首页 > 编程语言 > C#

C#创建多文档视图/多窗口(MDI)

2011-03-09 10:10 204 查看
在网上查了一些资料,发现介绍C#创建多文档视图的文章少,而且说得都比较杂,所以自己将这些天学习的结果整理出来,分享一下,希望对那些刚开始接触使用C#创建多文档的人有所帮助

 

1. 如何创建多文档界面?

    通过C#创建一个Window窗体后,在窗体的属性那里,把其中的IsMdiContainer属性设置为True,就能看到窗体已经变成MDI形式了

 

2. 为什么在MDI窗体上的客户区无法响应鼠标消息?

    这是因为将窗体设置为MDI窗体后,VS会自动给添加一个MdiClient的容器,所有在客户区的操作都是在这个容器上面的,要想能响应相 

    应的鼠标操作,就必须将响应鼠标事件的函数挂载到MdiClient容器上,可以按照下面的方式进行挂载

    
for (int i = 0; i < this.Controls.Count; i++)
{
MdiClient ClientMdi = this.Controls[i] as MdiClient;
if (ClientMdi != null)
{
ClientMdi.MouseMove += new System.Windows.Forms.MouseEventHandler(ClientMdi_MouseMove);
ClientMdi.BackColor = Color.FromArgb(214, 213, 215);
}
}

private void ClientMdi_MouseMove(object sender, MouseEventArgs e)
{

.............
}


 

3. 如何在客户区创建窗体?

    将子窗体的MdiParent属性设置为MDI窗体即可

    
Form  form1 = new Form();

Form  form2 = new Form();

form2.MdiParent = this;(表示的就是form1)

form2.show();


 

4. 如何拦截鼠标双击标题栏的消息?

   
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);

//可以处理标题栏上的鼠标双击事件
if (m.Msg == 0x00A3)
{

..........

}

}


 

5. 如何处理点击标题栏上窗体最大化的消息?

    重载窗体的OnResiz()函数

 

6. 如何让客户区中显示的窗体的位置在指定位置?

    
Form  form1 = new form1();  //父窗体

Form  form2 = new form2();  //子窗体

form2.StartPosition = FormStartPosition.Manual;

form2.Bounds = new System.Drawing.Rectangle(left, top, width, height);


 

大家有什么问题,可以留言交流哈,还请高手指教

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文档 c# object null