保证相同类型的MDI子窗体只会被打开一次的方法
看到论坛中有朋友问,如何可以保证在MDI主窗体中,同一类型的子窗体只能打开一次,再打开只是将原来打开的窗体激活。这个要求我以前写程序的时候也遇到过。我实现的基本思路是:
一般每个子窗体都是继承自Form类型,不同子窗体分别代表不同的功能,因此只需要判断当前MDI打开的子窗体的类型中有没有当前需要打开的子窗体类型就行了,如果有,则直接激活,如果没有则创建一个并加到主窗体中。具体实现起来有很多种办法,这里只写出一个利用泛型的实现:
/// 打开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子窗体只会被打开一次的方法相关推荐
- 如何在MDI中相同的子窗体只保留一个实例
为什么80%的码农都做不了架构师?>>> 阅读: 107 评论: 1 作者: blackcore 发表于 2009-11-16 14:24 原文链接 很明显,在一个MDI窗体中 ...
- 机房收费系统系列二:MDI子窗体和主窗体显示
在机房收费系统中,frmmain作为MDI的主窗体,想要在MDI主窗体上添加控件,picture控件是最好的伴侣,但是在添加了picture控件以后,问题也就随之而来了.点击子窗体的时候,子窗体被&q ...
- 单例模式——解决MDI子窗体实例化的问题
机房收费系统进行有一段时间了,但是始终有些历史遗留问题.比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题. 对于如何显示在上层的问题,这次采用的还是SetParent函数,在模块里 ...
- Delphi中实现MDI子窗体(转)
用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子.MDI体系中至少需要两种窗 ...
- c# mdi子窗体简单教程
c# mdi子窗体简单教程 2009-09-14 14:42 我要评论(0) 字号:T|T 一.参照自带例子做个mdi窗体 1.加入父窗体MainForm,并加入一个菜单栏,new form ...
- C# Winform 防止MDI子窗体重复打开
可以在MDI主窗体中添加以下方法. //防止打开多个窗体private bool ShowChildrenForm(string p_ChildrenFormText){int i;//依次检测当前窗 ...
- 如何:创建 MDI 父窗体、子窗体、确定活动的 MDI 子窗体
Microsoft Visual Studio 2008/.NET Framework 3.5 Windows 窗体编程 如何:创建 MDI 父窗体 多文档界面 (MDI) 应用程序的基础是 MDI ...
- WPF实现类似MDI子窗体的功能
在我的上一篇博客中 http://blog.csdn.net/soft2buy/article/details/5479946,提到了用UserControl做为WPF的"MDI子窗体&qu ...
- Delphi中MDI窗体调用MDI子窗体Delphi中MDI窗体调用MDI子窗体,怎么调用
先定义一个函数 private function FindForm(caption: string): bool; { Private declarations } public { Public d ...
最新文章
- android 软键盘的收回
- spark环境搭建java_Spark MLlib 环境搭建超详细教程
- python并发编程之多进程、多线程、异步和协程
- Polka.Domain完成40万美元私募轮融资
- python实现刷博器(适用于新浪、搜狐)
- puzzles —— 111、222、333、444、555、666、777、888、999
- [转载] 交互式数据可视化在Python中用Bokeh实现
- 从现有数据创建 XML 架构和数据集
- word撰写论文时公式格式:公式居中,编号右对齐(编号上下居中或底部对齐);公式编号引用
- 电信行业数据安全风险评估案例 - 数据安全治理之数据安全风险评估白皮书
- 为Windows Live Writer写一个简单的插件
- 46-动态编程语言(python)大作业-记忆翻牌游戏
- VS编程,几个好用的Visual Studio
- 【更新】本地提权工具公开|CVE-2020-0796:微软发布SMBv3协议“蠕虫级”漏洞补丁通告
- arm64的ioremap_ARMv8 内存管理架构.学习笔记
- [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
- matlab打开网页输入密码,MATLAB GUI 密码输入
- L1-020. 帅到没朋友(2016)
- Java实现 LeetCode 488 祖玛游戏
- # 小文件大问题——海量小文件解决方案初探
热门文章
- Pytorch-nn.BatchNorm2d()
- LNMP环境搭建——PHP篇
- gulp自动化构建工具--压缩css--学习笔记
- CentOS系统基础优化16条知识汇总
- 日志组件logback的介绍及配置使用方法
- elasticsearch 查询(match和term)
- 剑破冰山—Oracle开发艺术 前言
- angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
- C# .NET Web API 如何自訂 ModelBinder
- 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)