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

文本框内容自动投影,浅谈C#中事件的写法与应用C#中委托和事件,对应设计模式:Observe观察者模式触发事件A的时候自动引起事件B的改变有两个打开的窗体Form1,Form2都有一个文本框控件TextBoxForm1的文本框输入内容时,Form2的文本框内容自动跟随Form1的文本框内容而改变【自动投影】事件定义一般在触发方【肇事者】定义,在触发事件的类中绑定事件处理方法,事件绑定的处理方法一般是在引起后果的一方【被害者】定义。事件的主要作用是传递参数,事件本质上是一种特殊的委托,因此都有Invoke()或EventNa

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控件

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

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

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

 

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#中事件的写法与应用

 

今天的文章文本框内容自动投影,浅谈C#中事件的写法与应用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33140.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注