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


    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方法如下:

    1. ///
    2. /// 刷新文本框事件 ,必须为public,不然无法访问
    3. ///
    4. ///
    5. public void RefreshTextBox(string message)
    6. {
    7. textBox2.Text = message;
    8. }

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

    1. ///
    2. /// 文本框的改变事件 Form1的文本框的文本改变 自动引起Form2的文本框的文本改变
    3. /// Form2的文本是Form1的文本的影子
    4. ///
    5. event Action<string> ShadowEvent;

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

    1. Form2 form2 = null;
    2. private void button1_Click(object sender, EventArgs e)
    3. {
    4. if (form2 == null || form2.IsDisposed)
    5. {
    6. form2 = new Form2();
    7. ShadowEvent -= form2.RefreshTextBox;
    8. ShadowEvent += form2.RefreshTextBox;
    9. form2.Show();
    10. }
    11. else
    12. {
    13. form2.Activate();
    14. }
    15. }

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

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

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

    7.源程序:

    Form1.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace EventAndTrigDemo
    11. {
    12. public partial class Form1 : Form
    13. {
    14. ///
    15. /// 文本框的改变事件 Form1的文本框的文本改变 自动引起Form2的文本框的文本改变
    16. /// Form2的文本是Form1的文本的影子
    17. ///
    18. event Action<string> ShadowEvent;
    19. public Form1()
    20. {
    21. InitializeComponent();
    22. }
    23. Form2 form2 = null;
    24. private void button1_Click(object sender, EventArgs e)
    25. {
    26. if (form2 == null || form2.IsDisposed)
    27. {
    28. form2 = new Form2();
    29. ShadowEvent -= form2.RefreshTextBox;
    30. ShadowEvent += form2.RefreshTextBox;
    31. form2.Show();
    32. }
    33. else
    34. {
    35. form2.Activate();
    36. }
    37. }
    38. private void textBox1_TextChanged(object sender, EventArgs e)
    39. {
    40. ShadowEvent?.Invoke(textBox1.Text);
    41. }
    42. }
    43. }

    源程序Form2.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace EventAndTrigDemo
    11. {
    12. public partial class Form2 : Form
    13. {
    14. public Form2()
    15. {
    16. InitializeComponent();
    17. }
    18. ///
    19. /// 刷新文本框事件 ,必须为public,不然无法访问
    20. ///
    21. ///
    22. public void RefreshTextBox(string message)
    23. {
    24. textBox2.Text = message;
    25. }
    26. }
    27. }

    8.程序运行如图

     

  • 相关阅读:
    OpenCV笔记整理【绘制图形文字】
    C++ 11 多线程之future
    java毕业设计道路桥梁工程知识文库系统Mybatis+系统+数据库+调试部署
    合合信息、上海大学、华南理工大学发布业内首个古彝文编码“大字典” ,为古文字打造“身份证”
    java计算机毕业设计河南省农村多元化养老服务管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    每 日 练 习
    操作系统相关
    Verilog零基础入门(边看边练与测试仿真)-状态机-笔记(7-10讲)
    Java如何对接阿里云盘API
    笔记本屏幕忽亮忽暗解决方法大全,总有一款适合你
  • 原文地址:https://blog.csdn.net/ylq1045/article/details/127034812