需求

  • 主窗体的文本框内容发生改变的时候,多个子窗体的文本框也发生改变。

中介设计模式

实现

  • 当主窗体的文本框内容发生改变的时候,通过接口向所有实现这个接口的窗体发送一条消息(执行接口中的方法),从而实现同步。

主窗体代码:

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窗体文本框的同步相关推荐

  1. C# 利用委托事件进行窗体间的传值

    引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...

  2. [事件处理] js实现的文本框内容发生改变立马触发事件简单介绍

    js实现的文本框内容发生改变立马触发事件简单介绍: 本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydow或者keyup事件一样,只能够检测通过键盘输入 ...

  3. java文本框添加单击事件_Java文本框上的ActionEvent事件

    三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...

  4. GUI 事件监听和文本框事件监听

    4.事件监听 事件监听:什么事情发生了,需要做什么? 什么事情是事件,做什么?是我们编辑的功能 事件:是鼠标事件,键盘事件等. 例如鼠标按下,要下载音乐 键盘按下哪一个按键,需要执行什么操作 publ ...

  5. java 文本框输入事件_Java文本框上的ActionEvent事件 | 学步园

    三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...

  6. java文本框选中事件_Java文本框上的ActionEvent事件

    三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...

  7. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  8. 设计模式---观察者模式(Observer)和委托事件模型(DEM)

    1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...

  9. 刘铁锰老师C#语言入门详解(委托事件等部分有详细代码和注释)

    目录 1.初识类 1.1 类与对象的关系 1.2 类的三大成员 1.3 静态成员与实例成员 1.4 类修饰符 2.构成C#语言的基本元素 2.1 六个基本元素 2.2 算法简介 3. 详解类型.变量与 ...

最新文章

  1. R语言单因素方差分析与协方差分析
  2. MySQL的btree索引和hash索引的区别
  3. linux mysql5.1安装,1怎么安装?Linux环境下MySQL5?
  4. 比较经典的三层交换机实验
  5. Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
  6. mysql双击同步_求助,WINDOWS下MYSQL双机同步的问题
  7. 国际c语言混乱编码大赛,国际C语言混乱代码大赛(IOCCC)
  8. 微信小程序_for循环
  9. 哄人必备-女友道歉信生成工具吾爱版
  10. R语言作业wine 数据
  11. Ubuntu磁盘分区和挂载
  12. IDE, virtio, virtio-scsi 硬盘区别
  13. 当你开始听不清这个世界的声音
  14. autocad ios 虚线_CAD交互绘制虚线(com接口)
  15. USDP安装部署及问题
  16. 数影周报:IAM巨头Okta源代码泄露,江淮拟17.04亿元“深绑”蔚来
  17. swiper 滑动图片垂直居中
  18. 下载keil和proteus遇到的问题——学习笔记
  19. 冠状动脉造影图像分割
  20. 一个资深设计师应该知道的7个网站-第一弹

热门文章

  1. 【网络安全工程师面试合集】— 网络攻防技术演化历程
  2. linux shell脚本date命令 按照不同格式输出
  3. Linux系统管理(3)——防火墙 iptables基本原理 四表五链 NetFilter 概述
  4. Logistic逻辑回归用初等数学解读逻辑回归
  5. 谁说数据分析很难?看完这7大分析套路后,还学不会的来找我
  6. 985硕士面试20场全被拒,被竞争困住的数据分析人,太难了
  7. 让数据可视化告诉你,中秋吃这样的月饼绝对没错
  8. java mybatis分页查询语句_mybatis分页查询的实现(一)
  9. 可以多次使用同一个hbitmap吗_求婚钻戒和结婚钻戒可以是同一个吗?意义戴法各不同,别胡乱混淆...
  10. coreldraw x4如何出血_告诉你如何把cdr转换成适合印刷的pdf