c# WinForm 多次点击这个按钮会弹出多个窗体, 怎么才能只显示一个窗体。解决方案!(转载)

C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题) 这篇文章中关于图象的问题是:最好使用PNG格式,在项目中我们用过各种格式,觉得还是PNG格式在做图象背景时候更合理。实现一个不规则窗体,没有下面介绍的方法那么复杂,我转载这篇文章的原因就是因为它多出了一个BitmapRegion.cs 类。----------uestc_terry----------------------------------------------相信每个编程爱 阅读详情

多次点击这个按钮会弹出多个窗体, 怎么才能只显示一个窗体?

 

第一种解决方法 “单例”

点击按钮弹出窗体

  1. private void toolStripLabel1_Click(object sender, EventArgs e)
  2. {
  3. AddStudent add=AddStudent.AddStudentCreateInstance();
  4. add.MdiParent=this;
  5. add.Show();
  6. }

需要弹出的窗体实现

  1. private AddStudent()
  2. {
  3. InitializeComponent();
  4. }
  5. private static AddStudent _addStudent=null;
  6. /// <summary>
  7. /// 判断 AddStudent是否被构造过,如果构造过,不构造,否则构造
  8. /// </summary>
  9. /// <returns></returns>
  10. public static AddStudent AddStudentCreateInstance()
  11. {
  12. if(_addStudent==null || _addStudent.IsDisposed)
  13. {
  14. _addStudent=new AddStudent();
  15. }
  16. return _addStudent;
  17. }

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

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

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

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

 

第二种解决方案<泛型>

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

声明一个公共泛型

  1. public class GenericSingleton<T> where T : Form, new()
  2. {
  3. private static T t = null;
  4. public static T CreateInstrance()
  5. {
  6. if ( t== null || t.IsDisposed)
  7. {
  8. t = new T();
  9. }
  10. return t;
  11. }
  12. }

调用

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

 

where T : Form, new()

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

 


t.IsDisposed

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

 

 

 

C#实现限制只能启动一个WinForm进程的两种方法 的互斥体来确保只有一个进程可以获得对互斥体的所有权。如果当前进程能够成功获取互斥体的所有权,那么它就是第一个启动的进程,并且可以继续执行应用程序的逻辑。否则,如果无法获取互斥体的所有权,说明已经有一个进程在运行该应用程序,我们可以弹出一个消息框来提示用户。使用互斥体是一种简单直接的方法,而使用进程命名管道则更加灵活,可以进行更多的进程间通信操作。否则,如果连接超时,则说明没有其他进程在运行,我们可以继续执行应用程序的逻辑。进程命名管道是一种高级的进程间通信机制,可以用于实现进程之间的通信和同步。 阅读详情

相关推荐

c# 示例 点击按钮打开图片

一个form上面有一个按钮即一个图片显示框。 点击按钮后,实例化一个openFileDialog 类对象,然后打开用户选中的图片。 并且可以根据图片的大小调节button的长度以及窗口的大小

C#在button上显示图片

C#在button上显示图片 首先使用ImageList控件添加图片,此时会生成一个ImageList控件的变量,如imageList1,然后在button的ImageList属性中添加imageList1,可以通过设置button的Image、ImageIndex属性显示ImageList控件中保存的不同图片。 1、              使用Image btnTest.Image =

sygdp21的专栏 1万+

Winform只允许打开一个实例

Winform窗体只允许打开一个实例。第二次打开报错。

c# WinForm 点击出现弹出多个窗体, 怎么才能只显示一个窗体。解决方案

第一种解决方法 “单例” form1 private void button1_Click(object sender, EventArgs e) { Form2 f2 = Form2.GetInstance(); f2.Show(); } form2 public partial class Form2 : Form { private static Form2 inst...

ai 2740

专治疑难系列 - 解决打印机凭证冲突问题

一、问题描述 二、解决方法 三、问题已解决

Passerby_Wang的博客 2万+

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 543

winform 点击按钮,弹出窗体,弹出窗体的位置在按钮的下方

private void button_Click(object sender, EventArgs e) { Button btn = (Button)sender; //点击的按钮 Form form = new Form(this);//弹出的窗体 form.StartPosition = FormStartPosition.Manual;//必须要设置这...

weixin_30674525的博客 1275

从Bit到MCS:深度解析Xilinx FPGA程序固化流程与文件选型

本文深度解析Xilinx FPGA程序从调试到量产的固化流程,重点对比BIT、BIN、MCS和ELF四种文件格式的特性与适用场景。针对工业级应用,详细讲解MCS文件的生成优化、Flash烧录避坑指南及三级验证流程,并分享多镜像管理、加密安全等高级技巧,帮助开发者提升FPGA量产可靠性。

weixin_30924239的博客 323

1.WinForm练习--按钮控件:窗体之间的跳转

//新建三个窗体和按钮,当点第一个窗体按钮时跳转到第二个窗体,当点第二个窗体按钮时跳转到第三个窗体,当点第三个窗体按钮时关闭所有窗体。//----1.第一个窗体程序----public partial class Form1 : Form{public Form1(){InitializeComponent();}//按钮点击事件private void btn1_Click(object sen...

weixin_34148340的博客 4834

Mac上安装虚拟机搭载window系统

用Mac的都知道,很多window用的软件是Mac版本没有的。平时有的还得要求去用那些软件,有几种方式可供大家选择: 1.再买个window本; 2.装双系统; 3.装虚拟机,搭载window系统。 我比较推荐第3条,这样可以在Mac本上做到双开,一边开着mac一边开着window,还能做到同时处理文件,不至于重新启动操作系统,下边是具体实现步骤,其中有几个需要下载的,建议在网速好的时候完...

Coder_Mumu的博客 1万+

Unity Hub报错The Hub as encountered a critical error and must close

如果注册表HKEY_LOCAL_MACHINE\SOFTWARE\Unity Technologies\这个目录下有Hub文件,直接删掉然后重装就可以。C:\Users\Administrator\AppData\Roaming\Unity 作者:SevenVee。HKEY_CURRENT_USER\Software\Unity 下所有项,尝试过,卸载重装,清除临时文件无果后,最终决定删除所有与Hub有关的文件。重装unity后可以打开了。结果:卸载重装后还是会出现此问题。结果:重装后还是无法解决。

qq_42345116的博客 3637

7.6 关闭窗体

通过菜单【项目】|【添加Windows窗体】,弹出【添加新项】窗口,此时类型默认选中“Windows窗体”,保持默认名称“Form2.cs”,点击“确定”按钮。当Form2窗体出现时先不关闭,可以看到在【输出】窗口内,只显示了“显示模式窗体”,关闭Form2后,才会继续出现“显示窗体关闭”。运行后,单击击窗体右上角的关闭按钮,此时会弹出对话框,如果选择“否”,那么返回窗体,如果选择“是”,则退出窗体。点击窗体右上角的“X”按钮就可以关闭窗体,关闭窗体时会触发。【项目:code7-003】关闭窗体前确认。

学习微软 .net 技术开发 1745

CANOE-介绍 @014-基于CAPL的Someip测试(CANOE 15.0/16.0/17.0)【草稿】发送事件、方法

摘要:本文介绍了使用CANoe 16.0及更高版本配置SOME/IP测试环境的方法,包括硬件连接、工程配置和CAPL代码实现。SOME/IP是一种面向服务的车载通信协议,支持服务发现、事件推送和方法调用。文章详细说明了网络拓扑配置、数据库文件加载等步骤,并提供了CAPL代码示例,展示如何初始化多个应用端点(15个不同端口)和服务实例(73个服务),通过SomeIpOpenLocalApplicationEndpoint和SomeIpCreateProvidedServiceInstance函数实现。配置过程

沿流不止 424

winform c#中子窗体关闭刷新父窗体

父窗体Form1 子窗体Form2 Form1中有一个datagridview控件和一添加按钮,Form2中有一个Text控件和一个保存按钮 要求点击Form1窗体上的添加按钮,弹出Form2,再text里面输入内容,点击保存自动关闭Form2,刷新Form1中datagridview中的数据 From1中: private void button3_Click(object...

diaofuzuo3286的博客 566

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。在右栏找到芯片U1,然后在Pin Delay栏下找一个PIN脚随便输入一个数值,这一步的目的是导出Pin Delay.csv文件的格式。4、用这份文件的格式,重新编辑需要导入芯片的Pin Delay,然后选择菜单File→Import→Pin delay。2、回到PCB,选择菜单File→Export→Pin delay,导出Pin Delay。

bhxc809751502的博客 5139

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# winform判断窗体是否已打开

Form1 form; /// <summary> /// 开始检测 /// </summary> /// <param name="sender"></param> /// <param name="e"></param...

weixin_30794491的博客 1680

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c# winform 防止窗体多次打开

在使用MDI子窗体时,如果仅仅是使用 from.show() 代码,那么我们单击几次菜单,就会打开几个同样的子窗体。可以用这段代码防止这种情况。 首先添加一个函数,这个函数用于检测指定的子窗体是否已经打开,如果打开则激活这个子窗体,否则返回false值 private bool ShowChildrenForm(string p_ChildrenFormT...

bahui6013的博客 745

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WinForm中弹出新窗体的方法

1、SelectMaterial selFrm=new SelectMaterial();        selFrm.ShowDialog(); 转载于贝贝和新浪博客:blog.sina.com.cn/s/blog_6d86f7550100v2sh.html 场景描述:主窗体From1,在主窗体中有一button和TextBox,如下图主窗体 winForm中主窗体Form获

学过印刷包装工程研究过食品科学且会点计算机编程的多功能码农 3381

C#在winForm窗体上加上DialogResult作为返回值

例子: 在A窗体【按钮】弹出 B窗体 并且当B窗体关闭时判断是【确定】还是【取消】 则可以在B窗体上加上DialogResult返回值。 然后A窗体再进行判断。外语屋 整个过程代码如下: A窗体 弹出 B窗体并且接收返回值代码: DialogResult dr = F.ShowDialog(); if (dr == DialogResu...

weixin_30732825的博客 1118

winform 关闭窗体显示确定关闭对话框【原创】

学C#也有一段时间了,最近在写一个项目时需要在用户单击窗体的关闭按钮时弹出 确定对话框的功能。自己在网上找了很多方法都不太理想。如果,使用窗体的FormClosing事件,在用户单击取消后窗体照样会被关闭!所以,这个方法显然不是很好。最后使用windows 消息机制的方法达到了设计要求。下面我将核心代码发上来,高手可以走过: 代码 [DllImport("user32.dl...

400

在主窗体Panel中添加新的窗体(C#,winform开发)

本篇文章是我转载的,原笔迹在这儿:http://hi.baidu.com/weizi/item/4b0bbdf7f21ee40dd89e7234 在主窗体Panel中添加新的窗体(C#,winform开发) 本文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体的控件太多,不易于我们编程; 2)可以更灵活

chwei_cson的专栏 2万+

winfrom点击按钮修改数据_C# WinForm中DataGridView的修改删除功能

这里是自己做的修改和删除,点击修改时弹出修改窗体,点击删除时弹出"确认删除"的对话框.这里主要是说明,如何在DataGridView中获取到单击的相应按钮.WinForm中的DataGridView不像web下的GridView控件,可以直接给加入的修改,删除LinkButton添加事件,从而对行处理.在WinForm中,必须要获取到单击的是哪类按钮,才能对相应的按钮作相应的处理.首先,在Data...

weixin_35718351的博客 1235

C# winform 点击窗体内不同按钮显示不同的文字

在窗体内点击按钮显示不同的文字或者按钮图片,刚开始我的做法就是又添加一个面板,然后点击对应按钮显示对应的窗体,结果发现太麻烦了。后来请教了学长,发现真的非常的简单(虽然我当时弄了很久,hhh),这里呢,同样是以三个按钮为例子。 这里就是点击左边的按钮在右边的框框里面显示我需要的文字啦!先做三个按钮,按钮的命名方法也是取单词的首字母哦,右边的框框叫panel_right(嘴上说...

aitong3223的博客 2597

C# WinForm开发 取消窗体关闭按钮(整理)

这两天要弄个东西,然后不想要WinForm自带的关闭窗体的按钮,想用自己定义的一个窗体按钮。又不希望通过更改Form.::.FormBorderStyle属性的方法来实现,还想留着那个窗体栏可以对窗体进行移动等。其实禁用最小化、最大化按钮的直接可以在WinForm的属性面板中设置了,而这个禁用关闭按钮的就要自己手动弄了。 到网上找了找资料,找到了: ...

abble32189的博客 1054

C# WinForm 慎用 override CreateParams 来重载窗体的一些特性

C# WinForm 慎用 override CreateParams 来重载窗体的一些特性 窗体和控件的属性CreateParams(这真的是一个属性)很神奇,因为通过它你能够很方便的控制窗体或控件诸如边框、最大化最小化关闭按钮的隐藏、窗体的模式化弹窗模式等的一些特性。虽然,CreateParams有者如此巨大的潜力,但是在使用时要相当慎重,如果你不了解CreateParams这个属性的话,反...

cxu123321的博客 880
上一篇: git入门
下一篇: ABB机器人安装双目相机后实现相机手眼标定der步骤详记
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值