winform中实现不重复创建窗体
晚上有网友问了个问题,“通过button的click事件,实例化一个窗体,并show()。当我多次点击button时,会产生多个窗体。请问怎么解决这个问题?不想通过设置button的enable=false来解决这个问题。”其实这也算是一个比较实际的问题,有网友回答说可以使用模式窗体,呵呵,稍微想了下确实是可以解决问题。另一网友提出若不用模态框可否解决。我的第一反应就是加判断,随意回了句“先判断窗体是否存在。”。正好我刚创建了个新项目,打算随便写点小程序,于是试写下怎么判断。
我的做法是:起始窗口(frmMain)中加个按钮,添加一个新窗体,命名为frmTest(可选);在按钮单击事件中作判断,完整代码如下:
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"); } } }
这样做基本是可以解决问题了。有网友建议不要提示窗体存在,直接将窗体显示出来就行了,因此将代码改为:
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(); } }
这样应该是搞定了。看了下代码很简单,没啥技术含量。固本文只作为个人日记记录,不是技术文章。留着以后看看自己当年是从一个什么级别的菜鸟过来的。