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 ...
随机推荐
- Normal Equation Algorithm
和梯度下降法一样,Normal Equation(正规方程法)算法也是一种线性回归算法(Linear Regression Algorithm).与梯度下降法通过一步步计算来逐步靠近最佳θ值不同,No ...
- VIP视频下载终结器
youtube-dl: Youtube-dl是谷歌github上的一个开源项目,它是一款轻量级的命令行 下载实用工具,阿刚曾在乐软博客里文章<不仅仅是youtube,youtube-dl在线视频 ...
- Python判断一个字符串中是否存在多个子串中的一个
在使用python的开发过程中,常常需要判断,字符串中是否存在子串的问题, 但判断一个字符串中是否存在多个字串中的一个时,如if (a or b) in c或者if x contains a|b|c| ...
- ant的安装和使用
1.ant的安装 1.1 添加环境变量:ANT_HOME=D:\software\ant\apache-ant-1.10.1 在path中添加:%ANT_HOME%\bin 1.2 测试是否安装成功 ...
- Android apiDemo 学习——对话框AlertDialogSamples
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/31423049 注意:该代码仅仅适用于当次简单调用对 ...
- 使用Nuget重新安装packages.config中的组件的方法
Update-Package -ProjectName 'Ko.app.web' -Reinstall 该语句作用:按照packages.config中给出的程序组件,重新下载安装一遍.
- C语言注意事项
#include <stdio.h> int main() { /*********************************************** * 指针使用注意事项: * ...
- mysql5.7 基于gtid的主从复制
基本环境 版本 5.7.14 主库ip:192.168.1.100 port:3306 从库ip:102.168.1.101 port:3306 搭建注意事项 主库配置 gtid-mode=on en ...
- 游戏game
1.log4cxx 日志 2.protobuf 数据交互(类似json 3.boost.asio 网络库 4.boost.python 脚本支持 5.语法树 + c++处理excel资源
- windows线程函数必须为全局函数或者静态函数(转)
调用CreateThread(...)创建线程时要指定所创建线程的入口函数,此入口函数只能是全局函数或者类的静态成员函数. 全局函数很容易理解,但如果是类的成员函数则必须是静态成员函数,为何, 因为类 ...