Winform单例模式与传值
时间:2022-04-29
本文章向大家介绍Winform单例模式与传值,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
单例模式(singleton)的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
在多窗体界面中,如果要加入一个“关于”的窗体,用于显示软件的信息,那么可以用到单例模式,因为“关于窗体”类只需一个实例,下面是实例的代码:
"关于窗体":
1.在vs中建立winform项目,并建立两个窗体form1和form2
Form1单例:
private static Form1 _instance = null;
public Form1()
{
InitializeComponent();
}
public static Form1 GetInstance()
{
if(_instance==null || _instance.IsDisposed)
{
_instance = new Form1();
}
return _instance;
}
Form2单例和Form1相同。
2.窗体传值
winform窗体之间的传值可以分为主窗体向子窗体传值,以及子窗体向父窗体传值。
父窗体向子窗体传值:一直采用属性或者构造函数的方法,这里讲述属性的方法。首先需要定义一个属性
1 public string TextValue
2 {
3 get
4 {
5 return this.label1.Text;
6 }
7 set { this.label1.Text = value; }
8 }
我这里是传递一个label的值。
form2中接收:
private void button1_Click(object sender, EventArgs e)
{
if(AfterText!=null)
{
AfterText("10");
this.label1.Text = Form1.GetInstance().TextValue;
}
}
值得注意的是采用单例模式后,在form2中调用form1的方法。
子窗体向父窗体传值:一般采用事件或者委托来执行,这里采用委托的方法。
在form2中定义委托: public Action<string> AfterText {get;set;}
执行委托: AfterText("10");
from1在打开form2的时候,需要注册委托:
Form2 form2 = Form2.GetInstance(); form2.AfterText = new Action<string>(this.CalculFinish); form2.Show();
- 一个Pythoner的自我修养系列(一)
- 众里寻她千百度,蓦然回首,那bug却在灯火阑珊处
- Github|Python开源项目漫游指南(一)
- Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能
- .NET 4 System.Threading.CountdownEvent
- java与ruby的直观比较
- 每天一个Linux命令:chmod
- SparkSql 中外连接查询中的谓词下推规则
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
- Python进行数据可视化分析快速教程实例
- 一个抓取豆瓣图书的开源爬虫的详细步骤
- Java 8 Stream 教程 (三)
- silverlight ListBox 多列图片效果
- ZooKeeper构建分布式锁(选译)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 图解一致性哈希算法,全网(小区局域网)最通俗易懂
- ES 创建索引时使用Dynamic Mapping动态映射 对字符串字段生成keyword字段
- Java 报错信息 Error during JavaScript execution
- 记录一次SpringBoot Autowired为null的错误
- Collection接口-常用方法
- Qt开源作品34-qwt无需插件源码
- Qt开源作品35-秘钥生成器
- Qt开源作品36-程序守护进程
- Qt开源作品37-网络中转服务器
- Qt编写安防视频监控系统27-GPU显示
- Qt编写安防视频监控系统28-摄像机点位
- Qt编写安防视频监控系统29-掉线重连
- Qt编写安防视频监控系统30-GPS运动轨迹
- Qt编写安防视频监控系统31-onvif设备搜索
- Qt编写安防视频监控系统32-onvif信息获取