欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WinForm单例窗体用法实例

程序员文章站 2022-05-03 16:32:40
本文实例讲述了winform单例窗体。分享给大家供大家参考,具体如下: using system; using system.collections.gener...

本文实例讲述了winform单例窗体。分享给大家供大家参考,具体如下:

using system;
using system.collections.generic;
using system.windows.forms;
using system.text;
namespace common
{
  /// <summary>
  /// 窗体的单例模式
  /// </summary>
  /// <typeparam name="t"></typeparam>
  public class formsingle<t> where t : form, new()
  {
    private static t form;
    private static ilist<t> list { get; set; }
    public static t getform(t t1)
    {
      //检查是否存在窗体
      if (!isexist(t1))
      {
        createnewform(t1);
      }
      return form;
    }
    /// <summary>释放对象
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="args"></param>
    private static void display(object obj, formclosedeventargs args)
    {
      form = null;
      list.remove(form);
    }
    /// <summary>创建新窗体
    /// </summary>
    private static void createnewform(t t1)
    {
      form = t1;
      form.formclosed += new formclosedeventhandler(display);//订阅窗体的关闭事件,释放对象
    }
    /// <summary>
    /// 是否存在该窗体
    /// </summary>
    /// <param name="t1"></param>
    /// <returns></returns>
    private static bool isexist(t t1)
    {
      if (list == null)
      {
        list=new list<t>();
        list.add(t1);
        return false;
      }
      //如果窗体的文本相同则认为是同一个窗体
      foreach (var t in list)
      {
        if (t.text == t1.text)
          return true;
      }
      list.add(t1);
      return false;
    }
  }
}

调用如下:

不带参数的构造函数

customer.addcustomer customer = common.formsingle<customer.addcustomer>.getform(new customer.addcustomer());
customer.mdiparent = this;//mdi窗体
customer.windowstate = formwindowstate.maximized;//最大化
customer.show();
customer.activate();

带参数的构造函数

customer.addcustomer customer = common.formsingle<customer.addcustomer>.getform(new customer.addcustomer(customerid));
customer.mdiparent = this;
customer.windowstate = formwindowstate.maximized;
customer.show();
customer.activate();

更多关于c#相关内容感兴趣的读者可查看本站专题:《winform控件用法总结》、《c#窗体操作技巧汇总》、《c#常见控件用法教程》、《c#程序设计之线程使用技巧总结》、《c#操作excel技巧总结》、《c#中xml文件操作技巧汇总》、《c#数据结构与算法教程》、《c#数组操作技巧总结》及《c#面向对象程序设计入门教程

希望本文所述对大家c#程序设计有所帮助。