看到论坛中有朋友问,如何可以保证在MDI主窗体中,同一类型的子窗体只能打开一次,再打开只是将原来打开的窗体激活。这个要求我以前写程序的时候也遇到过。我实现的基本思路是:

一般每个子窗体都是继承自Form类型,不同子窗体分别代表不同的功能,因此只需要判断当前MDI打开的子窗体的类型中有没有当前需要打开的子窗体类型就行了,如果有,则直接激活,如果没有则创建一个并加到主窗体中。具体实现起来有很多种办法,这里只写出一个利用泛型的实现:

/// <summary>
/// 打开MDI子窗口并附加到MDI主窗口中,如果MDI主窗口中已经存在相同类型的子窗口,则直接激活
/// </summary>
/// <typeparam name="T">MDI子窗体类型</typeparam>
/// <param name="mdiParent">MDI主窗体引用</param>
/// <returns>当前创建或得到的MDI子窗体类型实例的引用</returns>
private T OpenUniqueMDIChildWindow<T>(Form mdiParent) where T : Form, new()
{
    foreach (Form subForm in mdiParent.MdiChildren)
    {
        if (subForm.GetType().Equals(typeof(T)))
        {
            subForm.Activate();
            return subForm as T;
        }
    }
    T newForm = new T();
    newForm.MdiParent = mdiParent;
    newForm.Show();
    return newForm;
}

转载于:https://www.cnblogs.com/Ricky81317/archive/2008/09/17/1292443.html

保证相同类型的MDI子窗体只会被打开一次的方法相关推荐

  1. 如何在MDI中相同的子窗体只保留一个实例

    为什么80%的码农都做不了架构师?>>>    阅读: 107 评论: 1 作者: blackcore 发表于 2009-11-16 14:24 原文链接 很明显,在一个MDI窗体中 ...

  2. 机房收费系统系列二:MDI子窗体和主窗体显示

    在机房收费系统中,frmmain作为MDI的主窗体,想要在MDI主窗体上添加控件,picture控件是最好的伴侣,但是在添加了picture控件以后,问题也就随之而来了.点击子窗体的时候,子窗体被&q ...

  3. 单例模式——解决MDI子窗体实例化的问题

    机房收费系统进行有一段时间了,但是始终有些历史遗留问题.比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题. 对于如何显示在上层的问题,这次采用的还是SetParent函数,在模块里 ...

  4. Delphi中实现MDI子窗体(转)

    用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容  ① 多文档窗体(MDI)  MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子.MDI体系中至少需要两种窗 ...

  5. c# mdi子窗体简单教程

    c# mdi子窗体简单教程 2009-09-14 14:42      我要评论(0) 字号:T|T 一.参照自带例子做个mdi窗体 1.加入父窗体MainForm,并加入一个菜单栏,new form ...

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

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

  7. 如何:创建 MDI 父窗体、子窗体、确定活动的 MDI 子窗体

    Microsoft Visual Studio 2008/.NET Framework 3.5 Windows 窗体编程 如何:创建 MDI 父窗体 多文档界面 (MDI) 应用程序的基础是 MDI ...

  8. WPF实现类似MDI子窗体的功能

    在我的上一篇博客中 http://blog.csdn.net/soft2buy/article/details/5479946,提到了用UserControl做为WPF的"MDI子窗体&qu ...

  9. Delphi中MDI窗体调用MDI子窗体Delphi中MDI窗体调用MDI子窗体,怎么调用

    先定义一个函数 private function FindForm(caption: string): bool; { Private declarations } public { Public d ...

最新文章

  1. android 软键盘的收回
  2. spark环境搭建java_Spark MLlib 环境搭建超详细教程
  3. python并发编程之多进程、多线程、异步和协程
  4. Polka.Domain完成40万美元私募轮融资
  5. python实现刷博器(适用于新浪、搜狐)
  6. puzzles —— 111、222、333、444、555、666、777、888、999
  7. [转载] 交互式数据可视化在Python中用Bokeh实现
  8. 从现有数据创建 XML 架构和数据集
  9. word撰写论文时公式格式:公式居中,编号右对齐(编号上下居中或底部对齐);公式编号引用
  10. 电信行业数据安全风险评估案例 - 数据安全治理之数据安全风险评估白皮书
  11. 为Windows Live Writer写一个简单的插件
  12. 46-动态编程语言(python)大作业-记忆翻牌游戏
  13. VS编程,几个好用的Visual Studio
  14. 【更新】本地提权工具公开|CVE-2020-0796:微软发布SMBv3协议“蠕虫级”漏洞补丁通告
  15. arm64的ioremap_ARMv8 内存管理架构.学习笔记
  16. [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
  17. matlab打开网页输入密码,MATLAB GUI 密码输入
  18. L1-020. 帅到没朋友(2016)
  19. Java实现 LeetCode 488 祖玛游戏
  20. # 小文件大问题——海量小文件解决方案初探

热门文章

  1. Pytorch-nn.BatchNorm2d()
  2. LNMP环境搭建——PHP篇
  3. gulp自动化构建工具--压缩css--学习笔记
  4. CentOS系统基础优化16条知识汇总
  5. 日志组件logback的介绍及配置使用方法
  6. elasticsearch 查询(match和term)
  7. 剑破冰山—Oracle开发艺术 前言
  8. angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
  9. C# .NET Web API 如何自訂 ModelBinder
  10. 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)