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

猜你喜欢

转载自www.cnblogs.com/fuqiang/p/10512415.html