C#中委托和事件,对应设计模式:Observe观察者模式

触发事件A的时候自动引起事件B的改变

有两个打开的窗体Form1,Form2

都有一个文本框控件TextBox

Form1的文本框输入内容时,Form2的文本框内容自动跟随Form1的文本框内容而改变

【自动投影】

事件定义一般在触发方【肇事者】定义,

在触发事件的类中绑定事件处理方法,事件绑定的处理方法一般是在引起后果的一方【被害者】定义。

比如交通事故肇事者A驾驶车辆闯红灯导致行人B【被害者】重伤。对于程序的事件来说。

首先A和B要进行事件绑定:产生联系【受害者B在肇事者A的行车轨迹中】

肇事者A 闯红灯这个事件触发,导致 被害者B重伤。

事件的主要作用是 传递参数,事件本质上是一种特殊的委托,因此都有

Invoke()或EventName(实参列表...),

BeginInvoke(),

EndInvoke()三种方法。

与委托不同的是 事件必须在该事件所在的类中Invoke(),BeginInvoke()使用,不能跨类使用。

事件有add和remove两种属性,语法如下

【和兰姆达表达式=>一样,-=和+=运算符中间不能有空格和其他任意字符 】

remove 移除事件

SomeEvent -= MethodProcess;

add 绑定事件

SomeEvent += MethodProcess;

1.新建窗体应用程序EventAndTrigDemo,在默认的Form1中添加TextBox和Button控件

2.新建windows窗体Form2,Form2添加一个文本框textBox2, 如图

3.窗体Form2添加一个刷新文本框的方法RefreshTextBox.

Form2的RefreshTextBox方法如下:

        /// <summary>/// 刷新文本框事件 ,必须为public,不然无法访问/// </summary>/// <param name="message"></param>public void RefreshTextBox(string message){textBox2.Text = message;}

4.切换到Form1,添加文本框更新事件ShadowEvent

        /// <summary>/// 文本框的改变事件 Form1的文本框的文本改变 自动引起Form2的文本框的文本改变/// Form2的文本是Form1的文本的影子/// </summary>event Action<string> ShadowEvent;

5.按钮打开Form2的方法,同时绑定form2的RefreshTextBox的方法

        Form2 form2 = null;private void button1_Click(object sender, EventArgs e){if (form2 == null || form2.IsDisposed){form2 = new Form2();ShadowEvent -= form2.RefreshTextBox;ShadowEvent += form2.RefreshTextBox;form2.Show();}else{form2.Activate();}}

6.窗体Form1为textBox1绑定TextChanged文本框改变事件

当文本框的值变化时导致Form2的文本框也自动跟着变化,即调用事件

        private void textBox1_TextChanged(object sender, EventArgs e){ShadowEvent?.Invoke(textBox1.Text);}

7.源程序:

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace EventAndTrigDemo
{public partial class Form1 : Form{/// <summary>/// 文本框的改变事件 Form1的文本框的文本改变 自动引起Form2的文本框的文本改变/// Form2的文本是Form1的文本的影子/// </summary>event Action<string> ShadowEvent;public Form1(){InitializeComponent();}Form2 form2 = null;private void button1_Click(object sender, EventArgs e){if (form2 == null || form2.IsDisposed){form2 = new Form2();ShadowEvent -= form2.RefreshTextBox;ShadowEvent += form2.RefreshTextBox;form2.Show();}else{form2.Activate();}}private void textBox1_TextChanged(object sender, EventArgs e){ShadowEvent?.Invoke(textBox1.Text);}}
}

源程序Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace EventAndTrigDemo
{public partial class Form2 : Form{public Form2(){InitializeComponent();}/// <summary>/// 刷新文本框事件 ,必须为public,不然无法访问/// </summary>/// <param name="message"></param>public void RefreshTextBox(string message){textBox2.Text = message;}}
}

8.程序运行如图

文本框内容自动投影,浅谈C#中事件的写法与应用相关推荐

  1. android的文本框内容居中显示图片,DIV+CSS中让布局居中_背景图片居中_文字内容居中...

    在DIV CSS布局的页面里,从布局内容到页面里文章文字居中都是非常重要的,而 1.首先介绍使用css属性让整体布局的居中: 设置对象的父级内容居中,这里一个页面的为父级是什么呢?我们可以想象整个页面 ...

  2. VBA实现从EXCEL单元格更新或修改PPT对应文本框内容并且不改变格式

    VBA实现从EXCEL单元格更新或修改PPT对应文本框内容并且不改变格式 配置工作 开发 演示 注意点!!! 打赏 原创不容易,请不要抄袭! 配置工作 EXCEL 2010版本以上配置 文件-选项-自 ...

  3. python获取网页文本框内容_python识别html主要文本框

    在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框: 抓取的思想是,利用 bs4 查找所有的 div,用正则筛选出每个 div 里面的中文,找到中文字数最多的 div 就 ...

  4. java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换、更新内置Excel数据、更新插入的文本框内容、合并表格单元格;

    本文参考地址:https://blog.csdn.net/wangxiaoyingWXY/article/details/95377533 在参考文章的基础上,增加了扩展.感谢被参考的妹子.另外该博客 ...

  5. 本节作业之显示不同问候语、显示密码、关闭二维码、循环精灵图背景、显示隐藏文本框内容、密码框格式提示错误、京东关闭广告、新浪下拉菜单、开关灯、换肤、表格隔行变色、表单取消全选、tab栏切换、发布删除留言

    本节作业之显示不同问候语.显示密码.关闭二维码.循环精灵图背景.显示隐藏文本框内容.密码框格式提示错误.京东关闭广告.新浪下拉菜单.开关灯.换肤.表格隔行变色.表单取消全选.tab栏切换.发布删除留言 ...

  6. python输出文本框_python TKinter获取文本框内容的方法

    python TKinter获取文本框内容的方法 如下所示: #coding:utf-8 import urllib,urllib2 import Tkinter #导入TKinter模块 ytm=T ...

  7. DOM--操作元素案例:分时显示不同的图片以及问候语;仿淘宝关闭标签案例;隐藏显示文本框内容;仿新浪注册页面中密码长度的判定

    分时显示不同的图片以及问候语 分析: 根据不同的时间来判断,所以需要获取到系统的时间. 利用分支语言来设置不同的图片 需要更换不同的图片,因此需要操作img的元素src 需要一个div来显示不同问候语 ...

  8. html js文本框文字列出,js实现文本框中输入文字页面中div层同步获取文本框内容的方法...

    这篇文章主要介绍了js实现文本框中输入文字页面中div层同步获取文本框内容的方法,实例分析了javascript操作dom元素的技巧,需要的朋友可以参考下 本文实例讲述了js实现文本框中输入文字页面中 ...

  9. php文本域输出_PHP转换文本框内容为HTML格式的方法

    本文实例讲述了PHP转换文本框内容为HTML格式的方法.分享给大家供大家参考,具体如下: 有时候我们将会用到将多行文本框中输入的内容以html格式显示出来,这样子可以保持原来的文本格式,如换行.回车等 ...

最新文章

  1. android8.1内核编译,Android8.1.0安卓源码编译
  2. openstack 云主机关机,自动running
  3. CSS3系列一(概述、选择器、使用选择器插入内容)
  4. FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
  5. 【IBatisNet Spring.Net】ORM与IOC 简单配置
  6. html中 一条样式规则,css规则的基本格式是什么?
  7. SharePoint学习札记[5] — 设置匿名访问
  8. php正则检查QQ,PHP 正则匹配手机号的QQ号
  9. Eclipse 默认设置的换行长度
  10. LoadRunner 11压测时碰到错误Error: missing newline in *:\*****\*.dat
  11. 快速排序 JAVA实现
  12. LVM逻辑卷管理学习
  13. 台式计算机可以放到笔记本立马,怎么把台式电脑投影到笔记本电脑
  14. 健身中有氧运动和无氧运动是什么?它们有什么区别?
  15. 观远数据完成2.8亿元C轮融资
  16. 微信小程序第三方登录
  17. Android根据pdf模板生成pdf文件
  18. 深入Android系统(二)Bionic库
  19. js在浏览器中对cookie进行增删改查
  20. STM32——蓝牙模块HC06

热门文章

  1. MySQL语句最全详解
  2. 你还记不记得这些:70-80年代十大经典零食
  3. 体感技术连接的虚拟与现实
  4. Vaa3D 神经元可视化辅助分析软件界面基本介绍
  5. 本周大新闻|FCC曝光Pico 4 VR一体机,雷朋母公司建立智能眼镜实验室
  6. 不用化妆就让你变漂亮
  7. python编程题说句心里话_说句心里话 A - osc_6kxooi0n的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. JAVA 微信-基本验证
  9. 安卓新浪微博授权分享 小米8Android9的坑。解决web网页授权无法正确回调bug。
  10. 微信小程序、小游戏的流量主一般可以赚多少钱?