有窗体Form1和窗体Form2,单击Form1上按钮,只弹出一个Form2。

Form2里自定义一个方法,里面判断是否弹出Form2,没有时弹出Form2。

         public static Form2 instance;
public static Form2 CreateForm()
{
if (instance == null || instance.IsDisposed)
{
instance = new Form2();
}
return instance;
}

Form1里用Form2的CreateForm()方法实例化Form2,

Form2 f2 = Form2.CreateForm();

泛型形式:

  public class Form_Singleton<T> where T : Form, new()
{
//private static T t_Form = null;
public static T t_Form { get; set; }
public static T CreateForm()
{
if (t_Form == null || t_Form.IsDisposed)
{
t_Form = new T();
}
return t_Form;
}
}

调用:

Form2 f2 = Form_Singleton<Form2>.CreateForm();

相关参考:

单例模式(Winform窗体的实现)

泛型约束 | where T : class的含义

Winform 窗体单例的更多相关文章

  1. DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法

    原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  2. C#WinForm 窗体单例模式 反射单例

    做了个mdi窗体 原以为指定一下MDIParent就可以了 没想到多次点击会出现多个窗体的现像 所以用到了单例模式 做法是这样的(学习出处:连接) 1.在子窗体声明一个子窗体类型的私有静态变量 并把子 ...

  3. C# WinForm 单例模式(例:同一个窗体只创建一次实例)

    //C# WinForm 单例模式(例:同一个窗体只创建一次实例) //打开窗体的事件: Form3 f = Form3.InstanceObject() ; //实例化窗体 f.Focus(); / ...

  4. WinForm 登录窗体 + 单实例运行

    关于怎么在winform里增加登录窗体或者如何让winform程序单实例运行网上都很多例子. 然而两者结合起来呢? //Program.cs static class Program { public ...

  5. C#Winform窗体利用单例子窗体传值父窗体

    简述:最近在做C#和HALCON编程,要用到单例的参数由子窗体改变父窗体的值.此例为简化版 1,点击系统设置 2,弹出子窗体,在其输入修改参数后点修改按钮 3,点击确定按钮后,关闭子窗体后,主窗体te ...

  6. C# 通用单例窗体类

    /// <summary> /// 通用的单例制作器 /// </summary> /// <typeparam name="T"></t ...

  7. C# 单例模式和窗体的单例打开方法

    第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我…… public class Singleton{    private static Singleton ...

  8. WinForm 窗体属性 窗体美化

    WinForm是·Net开发平台中对Windows Form的一种称谓. Windows窗体的一些重要特点如下: 功能强大:Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的 ...

  9. winform窗体控件(全)

    回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...

随机推荐

  1. sqlserver添加表、字段注释

    引用 :http://begoodluck.blog.163.com/blog/static/20450728020141191412788/ 1.sqlserver用语句给表注释EXECUTE sp ...

  2. 【java】之joda-time的使用

    Joda-Time Home:http://joda-time.sourceforge.net/ JavaDoc:http://joda-time.sourceforge.net/apidocs/in ...

  3. ARM-ContexM3/4组优先级和子优先级抢占规则

    多个中断源在它们的抢占式优先级相同的情况下,子优先级不论是否相同,如果某个中断已经在服务当中,则其它中断源都不能打断它:只有抢占式优先级高的中断才可以打断其它抢占式优先级低的中断. 就是说, 组优先级 ...

  4. git 文件重命名

    文件重命名 git mv old_name new_name git commit -m 'rename' git push origin master 删除文件 git rm filename

  5. 一个github账户多台电脑代码提交

    在实际工作生活中,我们可能不一定仅仅在一台电脑上编码,比如:我们平时在单位电脑1上写代码,提交代码到github账户,而我们也可能会在在家里的电脑2上继续工作,提交代码,这样就是在不同的电脑上提交代码 ...

  6. linux备份mysq脚本

    filename=`date +%Y%m%d_%H%M%S`database=finebwservername=officialcreatefilename=${servername}_${datab ...

  7. Angular2+typescript+webpack2(支持aot, tree shaking, lazy loading)

    概述 Angular2官方推荐的应该是使用systemjs加载, 但是当我使用到它的tree shaking的时候,发现如果使用systemjs+rollup,只能打包成一个文件,然后lazy loa ...

  8. 检测文件是否有BOM 头,并删除BOM头(php)

    将下面文件放在网站根目录访问即可,它会遍历当前目录下所有子目录,检测文件是否含有BOM头,并删除BOM头 <?php //remove the utf-8 boms //by magicbug ...

  9. CRM 2016 自定义对话框

    项目背景: CRM表单在操作时会有一些提示,或者交互的对话框. 直接 使用js的alert 和  confirm,网格上有些不协调. 以前在项目中使用过jquery 的,但是CRM官方不建议使用jqu ...

  10. [DFNews] Cellebrite UFED Logical/Physical Analyzer 3.8.1 维护性更新

    Maintenance Release             Cellebrite has released a maintenance version of UFED Physical / Log ...