第一种解决方法 “单例”

<mark>

书上有

private void toolStripLabel1_Click(object sender, EventArgs e)
{
AddStudent add=AddStudent.AddStudentCreateInstance();
add.MdiParent=this;
add.Show();
}

</mark>

private AddStudent()
{
InitializeComponent();
}


private static AddStudent _addStudent=null;
/// <summary>
/// 判断 AddStudent是否被构造过,如果构造过,不构造,否则构造
/// </summary>
/// <returns></returns>
public static AddStudent AddStudentCreateInstance()
{
if(_addStudent==null || _addStudent.IsDisposed)
{
_addStudent=new AddStudent();
}
return _addStudent;
}

第一步:把需要弹出的窗体的构造方法设置成“私有”

第二步:声明一个以窗体命为 类型的 变量并且等于null

第三步:写一个公开的静态方法,返回类型是窗体类名:

3.1判断是否等于null,如果等于null就创建对象返回,否则直接返回

第二种解决方案<泛型>

这样可以任意扩展你项目中的任何单例

声明一个公共泛型

public class GenericSingleton<T> where T : Form, new()
{
private static T t = null;
public static T CreateInstrance()
{
if ( t== null || t.IsDisposed)
{
t = new T();
}
return t;
}
}

调用

private void button2_Click(object sender,EventArgs e)
{
Form1 FrmAdd =GenericSingleton<Form1>.CreateInstrance();
FrmAdd.Show();
}

where T : Form, new()

约束是个窗口 并包含无参构造函数

t.IsDisposed

判断下是不是释放了;关闭窗体的时候是被释放了但不是NULL

转载:https://blog.csdn.net/cplvfx/article/details/88667235

c# WinForm 多次点击这个按钮会弹出多个窗体, 怎么才能只显示一个窗体。解决方案!的更多相关文章

  1. C# GridView Edit & Delete, 点击Delete的时候弹出确认框

    1. 使用GridView自带属性ShowEditButton和ShowDeleteButton,均设为True  <Columns> ... <asp:CommandField S ...

  2. div悬浮在屏幕的中间及点击按钮关闭弹出框

    #fd { position: fixed; z-index: 999; width: 109px; height: 323px; top: 71%; right: 1%; margin: -50px ...

  3. 安卓系统浏览器中select下拉按钮无法弹出选择面板奇怪问题解决

    今天遇到个让人崩溃的问题: 平台: 安卓 4.0 描述: 使用 appcan 开发 hybrid 应用,手机上点击下拉选框按钮无法弹出选择面板. 说明: 发现 webkit 内核 position:f ...

  4. js的事件冒泡和点击其他区域隐藏弹出层

    一.前言 在编写页面的时候,我们经常使用到弹出层.对于弹出层,原本的意义就是增加与用户的交互,提升用户的好感度.如果弹出层都没有较好的体验,那何谈通过交互来提升好感... 首先提出几个弹出层的注意点: ...

  5. bootstrap 弹出框点击其他区域时弹出框不消失选项设置

    默认情况下,bootstrap 弹出框点击其他区域时,弹出框会自动关闭,在很多时候,我们可能会希望达到和原生弹出框一样的效果,避免不小心点击其他区域时弹框自动隐藏,尤其是对于一些复杂的表单,重复填写可 ...

  6. jquery层居中,点击小图查看大图,弹出层居中代码,顶部层固定不动,滚动条滚动情况

    jquery层居中,点击小图查看大图,弹出层居中代码 http://www.cnblogs.com/simpledev/p/3566280.html 见第一版,发现一个情况,如果页面内容多出一屏的情况 ...

  7. C# ArcEngine 实现点击要素高亮并弹出其属性

    本文是模仿ArcMap里面的Identify(识别)功能,通过点击要素,使其高亮显示并弹出其属性表!本文只做了点击查询! 本文所用的环境为VS2010,AecEngine基于C#语言,界面是用Dev做 ...

  8. 联想E440问题:点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误

    笔记本:Levono E440   问题描述: 在控制面板中,点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误,如何解决? 即使在安装联想的驱动后,也没办法解决   解决步骤: 1. ...

  9. 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框

    尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ...

  10. mui搜索框在ios平台上点击多次才弹出键盘的解决方法

    今天使用Hbuilder调试手机端时,发现搜索框在安卓系统下,点击一次就可以弹出键盘 但是在iso下非常的不规律,要点击多次 代码实现如下: <div class="mui-input ...

随机推荐

  1. 【java】MVC模式和三层架构

    MVC是一种分层开发的模式 M:Model,业务模型,处理业务,存储数据,获取数据.JavaBean对象 V:  View , 视图,界面展示,展示数据.JSP或HTML C: Controller, ...

  2. centos7上安装使用docker环境

    系统环境准备: docker 运行在centos7上,要去系统为64位.系统内核版本为3.10以上 1.查看系统版本:cat/etc/redhat-release 2.查看系统内核版本:uname - ...

  3. linux并行执行线程

    资料来源: (1) https://www.jianshu.com/p/d8d58846c53f(作者:黄甫一) 1.并行任务较少时: (1) 给需要并行运行的命令行在结尾加上"&& ...

  4. laravel service provider 1

    可以理解成分两步: 配置.register, 因为只有配置了才有被调用去register, 也许不配置直接在appserviceProvider里面可以直接生效.... service: 具体工作的类 ...

  5. 《Django 3 Web应用开发从零开始学(视频教学版)》源码课件教学视频免费下载

    #好书推荐##好书奇遇季#<Django 3 Web应用开发从零开始学(视频教学版)>,配书资源文后提供了下载二维码.京东当当天猫都有发售. https://item.jd.com/133 ...

  6. Redis 突然变慢了如何排查并解决?

    业务场景 某购物平台打算举行"双十一"大型购物狂欢活动,到了半夜12点用户数量暴增,出现了一个技术故障,用户发现自己无法下单!!! 技术组立即组织人手进行故障排查,结论是 Redi ...

  7. java & spring 注解 备忘

    java deprecated 注解 1 /** 2 * General service for all common business logic. 3 * 4 * @author wanghaip ...

  8. unity tex2Dlod in vert

    https://forum.unity.com/threads/how-to-sample-a-texture-in-vertex-shader.513816/   GreatWall said: ↑ ...

  9. torch.squeeze函数解释,torch.FloatTensor()函数作用解释

    1. torch.squeeze(x,N)  主要对数据维度进行压缩 torch.squeeze(x,N) #也可以写为格式 x.squeeze(dim=N) 含义:当N未给定时,去掉x中所有维度为1 ...

  10. spring 任务执行器实例

    @Resource(name = "jobTaskExecutor") protected TaskExecutor jobTaskExecutor; @Override publ ...