C#在自定义事件里传递数据

通过自定义事件来传值。此种方法适合于写驱动程序。进行数据采集。

对于一般的系统事件,是有两个参数的,一个是sender,一个是EventArgs,对于sender,个事件的触发者,一般指向的是一个控件,但是对于EventArgs,一般常用来传递鼠标位置等信息,下面就自定义事件传值就是通过EventArgs来实现。

基础篇

通过EventArgs来实现传值,我们首先需要创建一个类,继承EventArgs,我们可以将需要传递的数据,直接在类里面定义成属性,这里以传递一个布尔(没有再最终的代码内使用)、一个浮点数,一个字符串为例,代码如下所示:

cs 复制代码
using System;
namespace myEventPrj
{
    /// <summary>
    /// 自定义事件
    /// </summary>
    public class myEventArgs:EventArgs
    {
        public bool BoolValue {  get; set; }    
        public float FloatValue {  get; set; }
        public string StrValue {  get; set; }
    }
}

然后我们创建一个类,类里面创建一个事件,并激发事件,这里传递的值为True和12.34,str传输时间,代码如下:

cs 复制代码
using System;
namespace myEventPrj
{
    internal class MyTestClass
    {
        public void AckEvent()
        {
            //触发事件
            myEvent?.Invoke(this, new myEventArgs()
            {
                BoolValue = true,
                FloatValue = 12.34f,
                StrValue = DateTime.Now.ToString()
            });
        }
        //创建事件
        public event EventHandler myEvent;
    }
}

我们在主窗体中,实例化类,并进行事件绑定,看看能不能获取到传递的数据,代码如下:

cs 复制代码
using System;
using System.Windows.Forms;

namespace myEventPrj
{
    //https://mp.weixin.qq.com/s?__biz=MzI4OTQyMzY3MQ==&mid=2247493894&idx=1&sn=131e50c046608bf17c09d8118739a2fe&chksm=ed20d4ff08f84521b62e39da3b3ae5533e0fb9ab40852533188fb103cb578bab7010e391b356&mpshare=1&scene=1&srcid=1223Cf4UQDdpgFDmWgaBQgQk&sharer_shareinfo=eba01a08e8f309806a7eb3645b15eb4c&sharer_shareinfo_first=eba01a08e8f309806a7eb3645b15eb4c&exportkey=n_ChQIAhIQGPSzxZb%2BaWifi0gzEAAEfxKfAgIE97dBBAEAAAAAAEVENy%2Bj2rEAAAAOpnltbLcz9gKNyK89dVj0zitidN8l4UPUZ%2FZQP5CCyKDsHp63TUkdE42ttJ%2FabOvWFTHQll95vdd%2FbVBWRQwYVm4Un5z%2FuVQB4ns7YgiHywMP0WaBLonyYRYEiTVYEOmXf3F3YH2rCzkAt4SbP8hsPEYaRO8cFKcX6uEktz6VVUtAQYsp4Z9KPXTkSCGA6S5t9LS50zkSQf5MQU2%2F%2FcKiMgHCeTsvifpWKxy1RY%2Fk8N03%2BqXB6ItdNGjmENQtzHyYdWAcbPKDdg6jmizPSnZCiUP%2FhDYAEOaPSumC0jiLJFS3bTh3EiaIDueE%2F31r71eoDaxKKWrblhVtIqowfWz0ILdBCsAr2VxL&acctmode=0&pass_ticket=CSpjFkwd1sOdAwac3Aa9E25thIeYyMCW8OIM1UwpsNp%2B06JUG23YSoSLKrq1WjGh&wx_header=0#rd
    public partial class Form1 : Form
    {
        MyTestClass T;
        public Form1()
        {
            InitializeComponent();
            T = new MyTestClass();
            T.myEvent += T_myEvent;
        }

        private void T_myEvent(object sender, EventArgs e)
        {
            myEventArgs arges = e as myEventArgs;
            richTextBox1.AppendText(arges.StrValue + " " + arges.FloatValue.ToString() + "\r\n");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            T.AckEvent();
        }    
    }
}

运行结果如下所示:

参考链接

【归】C#在自定义事件里传递自定义数据https://mp.weixin.qq.com/s?__biz=MzI4OTQyMzY3MQ==&mid=2247493894&idx=1&sn=131e50c046608bf17c09d8118739a2fe&chksm=ed20d4ff08f84521b62e39da3b3ae5533e0fb9ab40852533188fb103cb578bab7010e391b356&mpshare=1&scene=1&srcid=1223Cf4UQDdpgFDmWgaBQgQk&sharer_shareinfo=eba01a08e8f309806a7eb3645b15eb4c&sharer_shareinfo_first=eba01a08e8f309806a7eb3645b15eb4c&exportkey=n_ChQIAhIQGPSzxZb%2BaWifi0gzEAAEfxKfAgIE97dBBAEAAAAAAEVENy%2Bj2rEAAAAOpnltbLcz9gKNyK89dVj0zitidN8l4UPUZ%2FZQP5CCyKDsHp63TUkdE42ttJ%2FabOvWFTHQll95vdd%2FbVBWRQwYVm4Un5z%2FuVQB4ns7YgiHywMP0WaBLonyYRYEiTVYEOmXf3F3YH2rCzkAt4SbP8hsPEYaRO8cFKcX6uEktz6VVUtAQYsp4Z9KPXTkSCGA6S5t9LS50zkSQf5MQU2%2F%2FcKiMgHCeTsvifpWKxy1RY%2Fk8N03%2BqXB6ItdNGjmENQtzHyYdWAcbPKDdg6jmizPSnZCiUP%2FhDYAEOaPSumC0jiLJFS3bTh3EiaIDueE%2F31r71eoDaxKKWrblhVtIqowfWz0ILdBCsAr2VxL&acctmode=0&pass_ticket=CSpjFkwd1sOdAwac3Aa9E25thIeYyMCW8OIM1UwpsNp%2B06JUG23YSoSLKrq1WjGh&wx_header=0#rd

代码链接

【免费】C#自定义事件2024年12月23日资源-CSDN文库https://download.csdn.net/download/anlog/90170402

特此记录

anlog

2024年12月23日

相关推荐
郑州光合科技余经理12 分钟前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手22 分钟前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn089543 分钟前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长1 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
weixin_307779133 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_966949653 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash
边境悍匪5 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
我的xiaodoujiao5 小时前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
菜鸟~noob2335 小时前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
2501_930707785 小时前
使用C#代码使用条件格式为 Excel 隔行设置颜色
c#·excel