单例模式--实现多文档窗口(MDI)
来源:互联网 发布:233网校软件下载 编辑:程序博客网 时间:2024/05/16 03:33
使用MSVisualStudio设计一个多文档窗口(MDI),然后创建一个工具栏(ToolStrip),在工具栏中添加一个按钮,单击该按钮会弹出一个“工具”窗口,使用单例模式进行设计,使得“工具”窗口只能弹出一个
1.设计一个多文档窗口:先创建一个空白解决方案,再添加MDI类
右击项目--选择“添加”--新建项--MDI父窗体
2.创建的MDI默认带有工具栏,然后自己添加按钮,如下图所示
3.单击工具按钮弹出子窗口:工具
对工具按钮的操作
private void Tool_Click(object sender, EventArgs e) { //Tool tool = 多文档窗口_单例模式.Tool.GetTool(); //tool.MdiParent = this; //tool.Show(); Tool tool = 多文档窗口_单例模式.Tool.GetTool(); //if (tool == null && tool.IsDisposed) //{ // tool = 多文档窗口_单例模式.Tool.GetTool(); //} tool.MdiParent = this; tool.Show(); tool.Focus(); }4.使用懒汉式单例对Tool进行设计,使之只能弹出一个“工具”窗口
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 多文档窗口_单例模式{ public partial class Tool : Form { private static Tool tool = null; // 程序运行时创建一个静态只读的辅助对象 private static readonly object syncRoot = new object(); private Tool() { InitializeComponent(); } // 返回单例实例 双重检查锁定的双重判断机制 public static Tool GetTool() { // 第一重判断,先判断实例是否存在,不存在再加锁处理 if (tool == null) { // 加锁的程序在某一时间只允许一个线程访问 lock (syncRoot) { // 第二重判断 if (tool == null) { tool = new Tool(); } // 解决无法访问已释放对象 tool.Disposed += new EventHandler(Tool_Disposed); } } else { Console.WriteLine("工具窗口已创建,只能创建一个窗口"); } return tool; } // 关闭子窗口之后能再次打开 static void Tool_Disposed(object sender, EventArgs e) { tool = null; } //private void Exit_Click(object sender, EventArgs e) //{ //this.Dispose(); //} }}
运行结果:
5.启动程序
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 多文档窗口_单例模式{ class Program { static void Main(string[] args) { Application.Run(new MDI()); } }}
阅读全文
0 0
- 单例模式--实现多文档窗口(MDI)
- MFC MDI单窗口多标签实现
- MFC MDI单窗口多标签实现
- 单例模式实现mdi窗体控制
- 单文档(SDI)和多文档(MDI)
- 创建型模式之单例模式(多文档窗口)
- 单文档切分窗口实现多视图
- MDI——单例模式
- MDI窗体与单例模式
- MDI程序系统框架单文档对应多视图 切换 创建实现过程。
- MFC单文档(SDI)转换成多文档(MDI)解决方案
- MFC单文档(SDI)转换成多文档(MDI)解决方案
- python3+PyQt5 实现多文档界面(MDI)
- 多文档接口(MDI)
- C#MDI窗体实现多窗口效果
- 单文档多视图(分割窗口)
- 单文档多视图(分割窗口)
- C#创建多文档视图/多窗口(MDI)
- Linux vmstat命令实战详解
- 阿里云服务器下安装ftp
- JAVASE之Set和Map
- hive-2.3.2配置步骤及问题解答
- python学习笔记7:对象引用与对象
- 单例模式--实现多文档窗口(MDI)
- 文件下载代码(十一)
- LintCode练习-12. 带最小值操作的栈
- 设计模式怎么使用,如何选择设计模式
- hdu 5115 区间dp 狼BUFF
- 2017/12/05
- 1.1.2 Mac上面搭建Eclipse+Java+Maven环境
- 微服务架构之分布式事务解决方案一
- JavaScript的内置对象