WinForm单例窗体用法实例

 更新时间:2016年07月07日 15:37:17   作者:HTL  
这篇文章主要介绍了WinForm单例窗体,结合实例形式分析了窗体的单例模式定义、实现与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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#程序设计有所帮助。

相关文章

  • 如何在c#中使用opencv函数库

    如何在c#中使用opencv函数库

    这篇文章主要介绍了如何在c#中使用opencv,对图像匹配处理感兴趣的同学可以参考下
    2021-04-04
  • C#中矩阵运算方法实例分析

    C#中矩阵运算方法实例分析

    这篇文章主要介绍了C#中矩阵运算方法,实例分析了通过C#实现矩阵的初始化、转置矩阵、求逆矩阵等各种常用的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C# WinForm制作异形窗体与控件的方法

    C# WinForm制作异形窗体与控件的方法

    这篇文章主要介绍了C# WinForm制作异形窗体与控件的方法,结合实例形式分析了WinForm制作异形窗体与控件的原理、实现步骤与相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • Unity计时器功能实现示例

    Unity计时器功能实现示例

    计时器在很多地方都可以使用,本文主要介绍了Unity计时器功能实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C#静态构造函数用法实例分析

    C#静态构造函数用法实例分析

    这篇文章主要介绍了C#静态构造函数用法,以实例形式较为详细的分析了C#静态构造函数的用途、实现方法及使用技巧,需要的朋友可以参考下
    2015-06-06
  • C#中Linq查询基本操作使用实例

    C#中Linq查询基本操作使用实例

    这篇文章主要介绍了C#中Linq查询基本操作使用实例,有需要的朋友可以参考一下
    2013-12-12
  • C#实现把彩色图片灰度化代码分享

    C#实现把彩色图片灰度化代码分享

    这篇文章主要介绍了C#实现把彩色图片灰度化代码分享,用在一些特殊场合中,需要的朋友可以参考下
    2014-08-08
  • 解析C#中委托的同步调用与异步调用(实例详解)

    解析C#中委托的同步调用与异步调用(实例详解)

    本篇文章是对C#中委托的同步调用与异步调用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#继承IList 接口的实现步骤

    C#继承IList 接口的实现步骤

    C#中的IList<T>接口是.NET框架中的一种通用接口,它定义了一组在运行时可以使用类型参数T的元素的集合,本文给大家介绍了C#继承IList 接口的设计方法,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • unity实现按住鼠标选取区域截图

    unity实现按住鼠标选取区域截图

    这篇文章主要为大家详细介绍了unity实现按住鼠标选取区域截图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论