zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    I/O多路复用一些概念
    事件驱动模型
    协程-遇到I/O自动切换
    进程间共享数据Manager
    协程
    进程池
    Linux rpm 命令参数使用详解[介绍和应用]
    linux 增加用户 useradd 用法小结及配置文件说明
    java classpath批量设置shell脚本
    bat批处理设置Java JDK系统环境变量文件
  • 原文地址:https://www.cnblogs.com/fuqiang/p/10512415.html
Copyright © 2011-2022 走看看