asp.net中WinForm使用单例模式示例

例如在Windows应用程序中用下面代码打开一个窗体:

 代码如下 复制代码

private void button1_Click(object sender, EventArgs e)
{
    (new About()).Show();
}

其结果是每点一次按钮都会打开一个窗体,最后可能是这样:


这显然这我不是我们想要的,正常应该是点击按钮时判断窗体有没有打开过,有打开过显示激活窗体,没有则创建并打开窗体,对代码稍做修改:

 

 代码如下 复制代码
private void button1_Click(object sender, EventArgs e)
{
    if (frmAbout == null || frmAbout.IsDisposed)
    {
        frmAbout = new About();
        frmAbout.Show(this);
    }
    else
    {
        frmAbout.WindowState = FormWindowState.Normal;
        frmAbout.Activate();
    }
}
private About frmAbout = null;

这样可以满足上边需求,但是如果有多个地方需要打开窗体,同样的代码就得copy多次,这个场景下,我们可以使用单例模式来解决:

 代码如下 复制代码

About.cs:

using System;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class About : Form
    {
        /// <summary>
        /// 不能在外部调用构造函数
        /// </summary>
        private About()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 单例模式
        /// </summary>
        /// <returns></returns>
        public static About GetInstance()
        {
            if (_frmAbout == null || _frmAbout.IsDisposed)
            {
                _frmAbout = new About();
            }
            return _frmAbout;
        }
        private static About _frmAbout = null;
    }
}

调用方法:

 

 代码如下 复制代码
private void button1_Click(object sender, EventArgs e)
{
    About frmAbout = About.GetInstance();
    frmAbout.Show();
    frmAbout.WindowState = FormWindowState.Normal;
    frmAbout.Activate();
}
时间: 2024-09-30 03:43:46

asp.net中WinForm使用单例模式示例的相关文章

ASP.NET中读写cookie数据示例代码

ASP.NET中的cookie:创建Cookie方法 (1) Response.Cookies["userName"].Value = "admin";  Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);  //如果不设置失效时间,Cookie信息不会写到用户硬盘,浏览器关闭将会丢弃.  ASP.NET中的cookie:创建Cookie方法 (2) HttpCookie

asp.net中WinForm分多页打印示例

示例  代码如下 复制代码 using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         private PrintDocument printDocument1; //PrintDocumen

asp.net中Winform开发框架之数据即时更新的实现

在开篇之前,首先介绍一下Winform开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承,可以为我们提高效率,减少重复代码,它的作用不再在此讨论和强调. 采用窗体继承,极大程度上统一了界面,并且对常用的界面操作,提供了良好的封装,如基础数据编辑.新增窗体积累封装了对回车.方向键.数据刷新.异常处理.数据检查.数据保存.数据更新等接口,为窗体的数据处理提供了很大的方便性. 而数据查询显示

asp.net中WinForm窗体属性默认值更改的教程

每次新建WinForm应用程序项目后,第一件事就是修改Form1窗体FormBorderStyle.MaximizeBox和StartPosition三个属性值,有没有办法创建项目时自动修改好这些属性值呢?Form类没办法修改,自定义控件太麻烦,退而求其次,只要在创建项目时能在Form1.Designer.cs文件自动添加下边三句代码就可以了:  代码如下 复制代码 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed

asp.net中WinForm中TextBox的几个基本技巧

1  一些常用属性  代码如下 复制代码 this.textBox5.PasswordChar = '@';  //密码的样式             this.textBox5.UseSystemPasswordChar = true; //如果这个属性为true,则密码就和系统默认的密码样式相同,而PasswordChar属性不起作用.             this.textBox5.Multiline = true;   //多行显示             this.textBox5

asp.net 中WinForm出现无法处理的异常解决办法

,然后进行处理,但是这段代码中用到了BeginInvoke的语句块,而我使用了匿名方法,那么在匿名方法中的异常,外面是捕捉不到的.所以会出现无法处理的异常情况,正确的代码应该这样:  代码如下 复制代码 this.BeginInvoke(new MethodInvoker(delegate() {     bool flag = false;     try     {         flag = service.Authentication();//此处可能造成异常         if (

asp.net中WinForm版本升级器闪屏优化过程分享

最最近写了一个WinForm应用程序的版本升级器,测试发现没有新版本时升级器界面会一闪而过(闪屏),用户体验不好,于是想怎么解决这个问题. 升级器主要代码如下:  代码如下 复制代码 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         public Form1()         {   

asp.net 中winform防止被调用的实现方法

   代码如下 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Diagnostics; using System.Management; namespace 不允许外部调用 {     static class Program     {         /// <summary>         /// 应用程序的

在ASP.NET中存取图片到数据库的示例

asp.net|示例|数据|数据库 //开发环境:Window 2000.SQLServer2000..Net Framework SDK正式版 //开发语言:C#.ASP.Net //简介:数据库中图片存蓄及读取 //作者:engine /* 说明:在ASP中,我们用Request.TotalBytes.Request.BinaryRead()来上传图片,这个可恶的BinaryRead()方法非常笨,单个文件上传倒没什么大事,单如果多个图片上专可就花大气力了-!而现在ASP.Net中将会把解决