1.设置父窗体

使用MDI窗体,需要先将父窗体的IsMdiContainer属性设置为True

2.生成用于MDI子窗体的窗体

  1. 1 frmTemp f1 = new frmTemp();
  2. f1.Text = "窗体1";
  3. f1.MdiParent = this;
  4. f1.Show();
  5.  
  6. frmTemp f2 = new frmTemp();
  7. f2.Text = "窗体2";
  8. 8 f2.MdiParent = this;
  9. f2.Show();
  10.  
  11. 11 frmTemp f3 = new frmTemp();
  12. 12 f3.Text = "窗体3";
  13. f3.MdiParent = this;
  14. 14 f3.Show();

3.排列子窗体

层叠排列

  1. LayoutMdi(MdiLayout.Cascade);

水平平铺

  1. 1 LayoutMdi(MdiLayout.TileHorizontal);

垂直排列

  1. LayoutMdi(MdiLayout.TileVertical);

***********************************分割线**********************************

4.对于MDI,常用的是在父窗体中加载MDI子窗体,并且经常会在子窗体之间切换,实现的效果如下

1)创建两个不同的子窗体,并分别设置窗体的BackgroundImage,用于区分窗体

2)通过菜单栏的功能,选择对应的窗体

3)对于窗体,判断之前是否存在,进行不通的操作

代码如下:

  1. private void 企鹅ToolStripMenuItem_Click(object sender, EventArgs e)
  2. {
  3. //窗体没有创建或者窗体被释放
  4. if (f2 == null || f2.IsDisposed == true)
  5. {
  6. f2 = new frmTemp2();
  7. f2.FormBorderStyle = FormBorderStyle.None;
  8. f2.MdiParent = this; //设置窗体的MDI父窗体
  9. f2.Parent = this.panel1;//设置控件的父容器
  10. f2.Dock = DockStyle.Fill;
  11. f2.Show();
  12. if (f1 != null)
  13. f1.SendToBack();
  14. }
  15. else
  16. {
  17. f2.Activate();//使窗体获得焦点
  18. f2.BringToFront();
  19. }
  20. }

所有的示例程序链接如下:

http://download.csdn.net/detail/u010312811/9446887

更新1:(因为程序修改不大,没有动之前上传的代码)

如何解决界面之间切换的闪烁问题:

修改两个MDI子界面的构造函数,如下:

  1. this.SetStyle(
  2. ControlStyles.AllPaintingInWmPaint |
  3. ControlStyles.OptimizedDoubleBuffer, true);
  4. this.UpdateStyles();

效果图如下:

 

MDI窗体的更多相关文章

  1. MDI窗体容器--2016年12月15日

    MDI窗体容器 多文档界面(Multiple-Document Interface)简称MDI窗体.MDI窗体用于同时显示多个文档,每个文档显示在各自的窗口中.MDI窗体中通常有包含子菜单的窗口菜单, ...

  2. Winform MDI窗体容器、权限、简单通讯

    MDI窗体容器: 一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体 在内部的窗体 ...

  3. 小菜学习Winform(四)MDI窗体(附示例)

    前言 在做winfrom项目的时候我们可能会用到嵌套窗体,就是说一个容器中有多个窗体,可以分别管理和应用这些窗体,.net中提供了一种机制就是MDI,可能大家都会用,这边就简单的介绍下. 简单应用 w ...

  4. Winform MDI窗体容器,权限以及简单通讯

    MDI窗体容器: 一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体 在内部的窗体 ...

  5. Winform MDI窗体容器 权限 简单通讯

    MDI窗体容器 权限  using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  6. MDI窗体容器、权限设置

    一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...

  7. C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

    一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...

  8. MDI窗体容器 权限设置

    MDI窗体容器:它可以让其它窗体在它的内部打开,无法超出它的范围将某个窗体的属性:IsMdiContainer设置为true - 窗口样式如何将其它窗体在它的内部打开?窗体对象名.MdiParent ...

  9. winform(MDI窗体容器、权限设置)

    一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...

随机推荐

  1. Effective Objective-C 2.0 — 第8条:理解“对象等同性”这一概念

    第8条:理解“对象等同性”这一概念 若想检测对象的等同性,请提供“isEqual”与 hash 方法 相同的对象必须具有相同哈希码,但是两个哈希码相同的对象却未必相同. 不要盲目地逐个检测每条属性,而 ...

  2. js中的换算小技巧

    之前自己一直使用~~运算符来把‘112222’字符型的数值换算成整型的数值 但今天调试程序发现了一些问题 ~~'999'=>999 ~~'111111999'=>111111999 这些都 ...

  3. EF方便的添加一条信息...

    //刚开始通过EF添加数据都是这样的...↓ var db = new DBEntities() T_User t_userinfo = new T_User() { Type = "typ ...

  4. 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别

    join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...

  5. 微信公众平台回复链接可以直接访问,但不能是锚文字链接<a>标签

    最近在学习微信公众平台开发,由于编辑模式和开发模式不可同时开启,在开发模式下如果访客发送关键字过来暂时无法实现关键词自动回复,客服人员先用链接网址直接回复订阅用户,但请注意不能是文字链接,即<a ...

  6. 2015多校.Zero Escape (dp减枝 && 滚动数组)

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  7. LoadRunner脚本编写(转)

    性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...

  8. Java之enumeration(枚举)

    enumeration(枚举)是JDK1.5引入的新特性,放在java.lang包中. 1.枚举类方法介绍 package com.enums; public class TestEnum { pub ...

  9. error C2504 类的多层继承 头文件包含

    error C2504:头文件包含不全 今天碰到了很烦的问题,继承一个类之后,感觉头文件都包含了,可还是出现父类未定义的问题,最后发现,子类的子类在实现时,需要在cpp文件中包含所有他的父类的定义.因 ...

  10. centos-6.5 安装apache

    1.避免端口.程序冲突.使用rpm卸载httpd [root@www /]# rpm -qa httpd #检查httpd的包 [root@www /]# rpm -e httpd --nodeps ...