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 (www.111cn.net)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();
}
from:http://www.111cn.net/net/171/65990.htm
相关文章
- 使用 Visual Studio 部署 .NET Core 应用 ——.Net Core 部署到Ubuntu 16.04
- .NET开源Protobuf-net组件葵花手册
- 《ASP.NET MVC4 WEB编程》学习笔记------.net mvc实现原理ActionResult/View
- C#.NET常见问题(FAQ)-程序不包含适合于入口点的静态“Main”方法怎么办
- Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
- ASP.NET中TimeSpan的用法
- 常见掌握类库与工具体系图 艾提拉总结 Atitit 文档资料处理重要类库与工具体系树 Configuration yml xml jsoup Net apache commons net
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- Atitit. .net c# web 跟客户端winform 的ui控件结构比较
- Intersoft WebUI Studio for asp.net/asp.mvc
- VB.net:VB.net编程语言学习之基于VS软件连接SQL Server(利用ADO.NET操作数据库/添加新数据源/DataGridView数据表格控件)的简介、案例应用之详细攻略
- net start mysql 无法启动mysql解决方案之一【NET HELPMSG 3534】
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- LightningChart .NET 10.3.2.3 2023-01-20 Crack
- LightningChart .NET 10.3.2 Crack 支持旧项目直接升级
- 【.Net实用方法总结】 整理并总结.NET 中的 System.IO.Pipelines(管道)
- net core HTTP Error 500.31 - Failed to load ASP.NET Core runtime HTTP Error 500.30