C#WinForm 窗体单例模式 反射单例
做了个mdi窗体 原以为指定一下MDIParent就可以了
没想到多次点击会出现多个窗体的现像 所以用到了单例模式
做法是这样的(学习出处:连接)
1.在子窗体声明一个子窗体类型的私有静态变量 并把子窗体构造函数设为 私有 不私有也行不过单例调用时不要用new方法
private static frmAACar fc = null;
private frmAACar()
{
InitializeComponent(); }
2.声明一个public 静态函数 判断变量fc。不存在或只是关掉了 就new出来
public static frmAACar CreateSingle()
{
if (fc == null || fc.IsDisposed)
{
fc = new frmAACar();
} return fc;
}
3.调用
frmAACar f = frmAACar.CreateSingle();
f.Show();
4.多个窗体使用泛型 (约定了 必须有个无参的构造函数 调用时对应的窗体构造函数应为public )
//这里窗体是dotnetBar里的窗体继承来的,普通窗体继承Form就可以了
public class GenericSingleton<T> where T : DevComponents.DotNetBar.Metro.MetroForm, new()
{
private static T t = null; public static T CreateSingleton()
{
if (t == null || t.IsDisposed)
{ t = new T(); } return t;
} }
调用
frmAACar fc= GenericSingleton<frmAACar>.CreateSingleton();
fc.MdiParent = this;
fc.Show();
反射单例
/// <summary>
///通过反射创建子窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
Type t = Assembly.Load("TestForm").GetType("TestForm.Form4");
Form fc = (Activator.CreateInstance(t) as Form);
if (!ShowChildForm(fc.Text, this))//通过name判断会更好一些 毕竟name不会重名
{
fc.MdiParent = this;
fc.Show();
}
else
{
fc.Dispose();
}
} /// <summary>
/// 判断子窗体是不是存在
/// </summary>
/// <param name="sonText"></param>
/// <param name="MdiParentForm"></param>
/// <returns></returns>
public static bool ShowChildForm(string sonText, Form MdiParentForm)
{ foreach (var mdic in MdiParentForm.MdiChildren)
if (mdic.Text == sonText)
{
mdic.BringToFront();
return true;
} return false;
}
C#WinForm 窗体单例模式 反射单例的更多相关文章
- python使用__new__创建一个单例模式(单例对象)
#单例模式:使一个类只产生一个对象.他们的id地址都指向同一个内存地址 第一步:理解谁创建了对象 # 单例模式# 首先明白,我们在创建一个类的对象的时候,其实是调用的这个类的父类,即继承object, ...
- Python:Day25 成员修饰符、特殊成员、反射、单例
一.成员修饰符 共有成员 私有成员,__字段名,__方法 - 无法直接访问,只能间接访问 class Foo: def __init__(self,name,age): self.name = nam ...
- GOF设计模式之1:单例设计模式
1.单例设计模式核心作用: 保证一个类只有一个实例,并且提供了访问该实例的全局访问点 2.常见应用场景: window的任务管理器 项目中读取配置文件一般也是一个单例模式 数据库连接池的设计也是采用单 ...
- 【Java】设计模型-五种单例模型
一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够 ...
- Java 单例(Singleton)模式
一.什么是单例模式: 单例模式是一种确保了一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.被实例化的类称为单例类. 二.单例模式的特点: 单例类只有一个实例. 单例类必须自行创建自己唯一的 ...
- javaWeb项目中到底什么是单例,多例
你用杯子喝可乐,喝完了不刷,继续去倒果汁喝,就是单例.你用杯子喝可乐,直接扔了杯子,换个杯子去倒果汁喝,就是多例. 数据库连接池就是单例模式,有且仅有一个连接池管理者,管理多个连接池对象. 1. 什么 ...
- DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法
原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- Winform 窗体单例
有窗体Form1和窗体Form2,单击Form1上按钮,只弹出一个Form2. Form2里自定义一个方法,里面判断是否弹出Form2,没有时弹出Form2. public static Form2 ...
- C# 单例模式和窗体的单例打开方法
第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我…… public class Singleton{ private static Singleton ...
随机推荐
- 【C++第一个Demo】---控制台RPG游戏3【登陆菜单树】
[登陆系统--树结构] 1 首先我这里设计,由一个基类MainMenu构建树结构,并实现控制台上菜单之间的切换和返回操作 #ifndef _UI_BASE_H_ #define _UI_BASE_H_ ...
- python作业/练习/实战:1、简单登录脚本
作业要求 写一个登陆的小程序 username = xiaoming passwd = 123456 1.输入账号密码,输入正确就登陆成功, 提示:欢迎xxxx登陆,今天的日期是xxx. 2.输入错误 ...
- ajaxfileupload上传文件出现SyntaxError:unexpected token <错误
function ajaxFileUpload() { $.ajaxFileUpload ( { url: uri, secureuri: false, fileElementId: 'upFile' ...
- Java中的注解到底是如何工作的?
作者:人晓 www.importnew.com/10294.html 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Over ...
- Python中过滤HTML标签的函数
#用正则简单过滤html的<>标签 import re str = "<img /><a>srcd</a>hello</br>&l ...
- windows下虚拟环境的安装与创建
使用虚拟环境的好处: 可以方便的解决不同项目对类库的依赖问题. 可以在系统中Python解释器中避免包的混乱和版本的冲突. 为每个程序单独创建虚拟环境,可以保证程序只能访问虚拟环境中的包,保持全局解释 ...
- 如何安装python运行环境Anaconda
参考视频:https://v.qq.com/x/page/u05499rig9s.html
- SQL中的DDL、DML、DCL、TCL
1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...
- Linux使用yum install 安装程序时,提示“另外一个程序锁定了 yum;等待它退出……”
Linux使用yum install 安装程序时,提示“另外一个程序锁定了 yum:等待它退出……” 原因: yum命令一次只能安装一个软件,所以当你下载安装第二个软件包时,系统进程锁会锁定yum,这 ...
- javascript 中的函数
/* 第二天 */ 函数 函数是js里最有趣的东西了,函数实际上就是对象,每个函数Function类型的实例,函数名实际上是指向函数对象的指针.不带圆括号的函数时访问函数的指针,带圆括号的是调 ...