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

作者:袖梨 2022-06-25

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

 代码如下 复制代码

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

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

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

 

 代码如下 复制代码
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
    {
        ///


        /// 不能在外部调用构造函数
        ///

        private About()
        {
            InitializeComponent();
        }

        ///


        /// 单例模式
        ///

        ///
        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();
}

相关文章

精彩推荐