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

在网上查了一些资料,发现介绍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);

 

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

 

你可能感兴趣的:(软件编程技术)