C#利用泛型,避免子窗体重复开启
作者:互联网
我最近在做一个项目,主界面上有很多button,每个button基本上对应了一个窗口,但是在之前版本的源代码中并没有加入防止子窗体重复开启的代码。
于是百度了一下,看到了如下的代码:
1、在主界面的类中定义内部全局变量:
1 private static Form1 newF;
2、在button函数中定义
1 private void button1_Click(object sender, EventArgs e) 2 { 3 4 if (newF == null || newF.IsDisposed) 5 { 6 newF = new Form1(); 7 newF.Show(); 8 } 9 else 10 { 11 newF.WindowState = FormWindowState.Normal; 12 newF.Activate(); 13 } 14 }
即如果检测到Form1窗体不存在的话就new一个,这样的话就能保证最多存在一个Form1的实例。
但是如果每个button再写一个这样的函数的话就很麻烦而且冗余。
于是想到了泛型,便有了下面的代码,定义一个泛型函数:
1 public static void Formshow<T>(ref T newForm) where T : Form,new() 2 { 3 if (newForm == null || newForm.IsDisposed) 4 { 5 newForm = new T(); 6 newForm.Show(); 7 } 8 else 9 { 10 newForm.WindowState = FormWindowState.Normal; 11 newForm.Activate(); 12 } 13 }
使用代码
1 private void button1_Click(object sender, EventArgs e) 2 { 3 Formshow<Form1>(ref newF); 4 }
这样看起来是不是简洁多了?
注意ref,如果没加ref标识符会导致newF无法赋值,就会每点一次都实例化一个窗体。
然后要注意的是Form1的构造函数不能含有参数,按照有参数写的话会报错。
转载请注明:https://www.cnblogs.com/fuqiang/p/10512415.html
标签:C#,button,newF,newForm,Form1,窗体,泛型,new,ref 来源: https://www.cnblogs.com/fuqiang/p/10512415.html