使用委托(事件)或中介设计模式实现多个Windows窗体文本框的同步
需求
- 主窗体的文本框内容发生改变的时候,多个子窗体的文本框也发生改变。
中介设计模式
实现
- 当主窗体的文本框内容发生改变的时候,通过接口向所有实现这个接口的窗体发送一条消息(执行接口中的方法),从而实现同步。
主窗体代码:
public partial class parentFrm : Form{private List<IMessage> list = new List<IMessage>();public parentFrm(){InitializeComponent();}public void setText(string text){this.tb.Text = text;}private void button1_Click(object sender, EventArgs e){ChildFrm1 frm = new ChildFrm1();list.Add(frm);frm.Show();ChildFrm2 frm2 = new ChildFrm2();list.Add(frm2);frm2.Show();ChildFrm3 frm3 = new ChildFrm3();list.Add(frm3);frm3.Show();}private void tb_TextChanged(object sender, EventArgs e){foreach (IMessage Msg in list){Msg.onMessage(this.tb.Text);}}}
子窗体(由于子窗体基本上一样,在这里就只写一个)
public partial class ChildFrm1 : Form,IMessage{public ChildFrm1(){InitializeComponent();}public void onMessage(string str){this.textBox1.Text = str;}}
接口
interface IMessage{void onMessage(string str);}
- 主窗体将所有需要同步文本内容的子窗体都添加到一个IMessage集合中,然后当主窗体的文本框中内容发生改变的时候,遍历这个集合,执行onMessage()方法,修改子窗体文本框中的内容。
- IMessage这个接口就是一个中介。
委托设计模式
实现:
- 创建一个接口,接口里面写一个设置文本框内容的方法,然后让子窗体实现这个接口,在主窗体中声明一个委托,这个委托用来装接口中的这个方法,然后实例化这个委托,子窗体创建的时候,把所有子窗体中实现的接口中的方法给委托实例,然后在主文本框发生改变的这个方法中执行这个委托。
代码
- 主窗体
public delegate void delSendMessage(string str);public partial class Form1 : Form{//事件public event delSendMessage sendMessageEvent;public delSendMessage sendMessage { get; set; }public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){ChildFrm1 frm1 = new ChildFrm1();//this.sendMessageEvent += frm1.setText;this.sendMessage += frm1.setText;frm1.Show();ChildFrm2 frm2 = new ChildFrm2();//this.sendMessageEvent += frm2.setText;this.sendMessage += frm2.setText;frm2.Show();ChildFrm3 frm3 = new ChildFrm3();//this.sendMessageEvent += frm3.setText;this.sendMessage += frm3.setText;frm3.Show();}private void textBox1_TextChanged(object sender, EventArgs e){sendMessage.Invoke(this.textBox1.Text);//sendMessageEvent(this.textBox1.Text);}}
- 子窗体
public partial class ChildFrm2 : Form,ISetText{public ChildFrm2(){InitializeComponent();}public void setText(string str){this.textBox1.Text = str;}}
- 注释掉的部分就是用事件实现,代码和委托差不多,区别在于事件更安全,因为事件只能在本类内部调用,而委托可以在其他类中调用。
转载于:https://www.cnblogs.com/Godfunc/p/6709136.html
使用委托(事件)或中介设计模式实现多个Windows窗体文本框的同步相关推荐
- C# 利用委托事件进行窗体间的传值
引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...
- [事件处理] js实现的文本框内容发生改变立马触发事件简单介绍
js实现的文本框内容发生改变立马触发事件简单介绍: 本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydow或者keyup事件一样,只能够检测通过键盘输入 ...
- java文本框添加单击事件_Java文本框上的ActionEvent事件
三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...
- GUI 事件监听和文本框事件监听
4.事件监听 事件监听:什么事情发生了,需要做什么? 什么事情是事件,做什么?是我们编辑的功能 事件:是鼠标事件,键盘事件等. 例如鼠标按下,要下载音乐 键盘按下哪一个按键,需要执行什么操作 publ ...
- java 文本框输入事件_Java文本框上的ActionEvent事件 | 学步园
三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...
- java文本框选中事件_Java文本框上的ActionEvent事件
三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...
- Observer设计模式中-委托事件-应用在消息在窗体上显示
Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...
- 设计模式---观察者模式(Observer)和委托事件模型(DEM)
1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...
- 刘铁锰老师C#语言入门详解(委托事件等部分有详细代码和注释)
目录 1.初识类 1.1 类与对象的关系 1.2 类的三大成员 1.3 静态成员与实例成员 1.4 类修饰符 2.构成C#语言的基本元素 2.1 六个基本元素 2.2 算法简介 3. 详解类型.变量与 ...
最新文章
- R语言单因素方差分析与协方差分析
- MySQL的btree索引和hash索引的区别
- linux mysql5.1安装,1怎么安装?Linux环境下MySQL5?
- 比较经典的三层交换机实验
- Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
- mysql双击同步_求助,WINDOWS下MYSQL双机同步的问题
- 国际c语言混乱编码大赛,国际C语言混乱代码大赛(IOCCC)
- 微信小程序_for循环
- 哄人必备-女友道歉信生成工具吾爱版
- R语言作业wine 数据
- Ubuntu磁盘分区和挂载
- IDE, virtio, virtio-scsi 硬盘区别
- 当你开始听不清这个世界的声音
- autocad ios 虚线_CAD交互绘制虚线(com接口)
- USDP安装部署及问题
- 数影周报:IAM巨头Okta源代码泄露,江淮拟17.04亿元“深绑”蔚来
- swiper 滑动图片垂直居中
- 下载keil和proteus遇到的问题——学习笔记
- 冠状动脉造影图像分割
- 一个资深设计师应该知道的7个网站-第一弹
热门文章
- 【网络安全工程师面试合集】— 网络攻防技术演化历程
- linux shell脚本date命令 按照不同格式输出
- Linux系统管理(3)——防火墙 iptables基本原理 四表五链 NetFilter 概述
- Logistic逻辑回归用初等数学解读逻辑回归
- 谁说数据分析很难?看完这7大分析套路后,还学不会的来找我
- 985硕士面试20场全被拒,被竞争困住的数据分析人,太难了
- 让数据可视化告诉你,中秋吃这样的月饼绝对没错
- java mybatis分页查询语句_mybatis分页查询的实现(一)
- 可以多次使用同一个hbitmap吗_求婚钻戒和结婚钻戒可以是同一个吗?意义戴法各不同,别胡乱混淆...
- coreldraw x4如何出血_告诉你如何把cdr转换成适合印刷的pdf