DI,全称是多文档界面(Multiple Document Interface),主要应用于基于图形用户界面的系统中。其目的是同时打开和显示多个文档,便于参考和编辑资料。

  下面是一个WinForm MDI小例子。

 1 using System;
2 using System.Windows.Forms;
3
4 namespace WinFormMDI
5 {
6 public partial class FrmMain : Form
7 {
8 public FrmMain()
9 {
10 InitializeComponent();
11 }
12
13 private void Child1ToolStripMenuItem_Click(object sender, EventArgs e)
14 {
15 ShowSingleWindow(typeof(FrmChild1));
16 }
17
18 private void Child2ToolStripMenuItem_Click(object sender, EventArgs e)
19 {
20 ShowSingleWindow(typeof(FrmChild2));
21 }
22
23 private void ShowSingleWindow(Type type)
24 {
25 foreach (Form f in this.MdiChildren)
26 {
27 if (f.GetType() == type)
28 {
29 f.Activate();
30 return;
31 }
32 }
33
34 Form frm = type.Assembly.CreateInstance(type.ToString()) as Form;
35 frm.MdiParent = this;
36 frm.WindowState = FormWindowState.Maximized;
37 frm.Show();
38 }
39 }
40 }

  注:要先设置FrmMain的IsMdiContainer属性为true,这样才能作为mdicontainer。ShowSingleWindow则实现child form实例只有一个。

  效果:

WinForm MDIParent如何防止重复打开的更多相关文章

  1. c# winform中预防窗体重复打开

      当窗体以非模态形式打开的时候,有可能出现重复打开的情形,利用以下的代码可以预防重复打开! foreach (Form f in Application.OpenForms) { if (f.Nam ...

  2. 如何实现MDI窗体不重复打开同一个子窗体?

    使用MDI窗体时,默认是可以多次打开同一个子窗体的,那么如何控制不重复打开同一个子窗体呢?MDI窗体有个重要属性——MdiChildren,该属性表示MDI窗体打开的子窗体的数组,循环遍历该数组,可以 ...

  3. Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开

    Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...

  4. WPF实现只打开一个窗口,并且重复打开时已经打开的窗口置顶

    内容来自:https://codereview.stackexchange.com/questions/20871/single-instance-wpf-application 第一步:添加Syst ...

  5. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)

    这里地址的方法也是可用的,但是net3.5不能使用 为此我选择使用win32api的方式来遍历当前桌面所有资源管理器 /// <summary> /// 不重复打开dwg路径的资源管理器 ...

  6. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案

    在开发winphone程序时候 我们经常遇到调试.在调试的时候 可能会重复打开 debug一下.可是有时候 经常遇到 "正在加载...."字样.而且很慢.效率很低. 测试发现 在 ...

  7. EasyUI选项卡避免重复打开

    前台代码: <div data-options="region:'west',title:'我的工作平台',split:true,iconCls:'icon-desk'"  ...

  8. C# Winform 防止MDI子窗体重复打开

    可以在MDI主窗体中添加以下方法. //防止打开多个窗体 private bool ShowChildrenForm(string p_ChildrenFormText) { int i; //依次检 ...

  9. WinForm连续点击按钮只打开一次窗体

    许多朋友,学习C#时,制作WinForm小程序总会有一个问题,如果我们在父窗体设置的是点击一个按钮,打开一个子窗体,连续点击总会连续出现一样窗体,可是我们有时只想打开一次窗体,怎么办? 呵呵,我来方法 ...

随机推荐

  1. How to become a successful bug bounty hunter

    出处:https://www.hackerone.com/blog/become-a-successful-bug-bounty-hunter 如果你梦想成为赏金猎人,你的梦想就会成真 - 不要把你的 ...

  2. tomcat报错:java.net.SocketException: Permission denied["http-nio-80"]

    tomcat报错:java.net.SocketException: Permission denied["http-nio-80"] 问题:使用非root账户tomcat启动to ...

  3. 解决方案:centos运行shell脚本时报“$'\r': 未找到命令”

    =============================================== 2018/9/12_第1次修改                       ccb_warlock == ...

  4. jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed

    主从jenkins当调用 slave 执行编译脚本后提示如下错误,找了半天怎么也没有问题,后来忽然发现slave上java的版本和master不同,一个 1.8 一个 1.10,将slave降回1.8 ...

  5. Laravel 的 JSON API 接口自动化测试

    Laravel 自带了两种测试类型 Feature Test: 功能测试.针对类似接口这种流程性的测试. Unit Test: 单元测试.针对单个函数这种输入输出结果的测试. 新建一个 Feature ...

  6. BZOJ 1934 Vote 善意的投票(最小割+二分图)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1934 题目大意: 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题 ...

  7. SOA 解惑

    SOA 解惑 SOA 不是一种技术,它是一种设计方法.最近一段时间我碰到了很多关于 SOA 的具有误导性的文章.尤其是,有些人混淆了 SOA 和诸如 BPM.ESB 以及复合事件处理 (CEP) 之类 ...

  8. Intellij IDEA Debug调试技巧

    1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断点 3.使用postman发送http请求 4.请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5.按F8 在 ...

  9. 用 javascript 实现 ping 一个主机,仅测试是否能够连接。

    function ping(ip){ var img = new Image(); var start = new Date().getTime(); img.src = "http://& ...

  10. JS跨域设置和取Cookie

    在Javascript脚本里,一个cookie 实际就是一个字符串属性.当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值.每个cookie除了 name ...