winform中实现不重复创建窗体
晚上有网友问了个问题,“通过button的click事件,实例化一个窗体,并show()。当我多次点击button时,会产生多个窗体。请问怎么解决这个问题?不想通过设置button的enable=false来解决这个问题。”其实这也算是一个比较实际的问题,有网友回答说可以使用模式窗体,呵呵,稍微想了下确实是可以解决问题。另一网友提出若不用模态框可否解决。我的第一反应就是加判断,随意回了句“先判断窗体是否存在。”。正好我刚创建了个新项目,打算随便写点小程序,于是试写下怎么判断。
我的做法是:起始窗口(frmMain)中加个按钮,添加一个新窗体,命名为frmTest(可选);在按钮单击事件中作判断,完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public partial class frmMain : Form { private frmTest frm = null ; public frmMain() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e) { if (frm == null || frm.IsDisposed) { frm = new frmTest(); frm.Show(); } else { MessageBox.Show( "Exists" ); } } } |
这样做基本是可以解决问题了。有网友建议不要提示窗体存在,直接将窗体显示出来就行了,因此将代码改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public partial class frmMain : Form { private frmTest frm = null ; public frmMain() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e) { if (frm == null || frm.IsDisposed) { frm = new frmTest(); } frm.Show(); frm.Activate(); } } |
这样应该是搞定了。看了下代码很简单,没啥技术含量。固本文只作为个人日记记录,不是技术文章。留着以后看看自己当年是从一个什么级别的菜鸟过来的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 终于决定:把自己家的能源管理系统开源了!
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· ASP.NET Core - 日志记录系统(二)
· 实现windows下简单的自动化窗口管理