通过自定义事件来传值。此种方法适合于写驱动程序。进行数据采集。
对于一般的系统事件,是有两个参数的,一个是sender,一个是eventargs,对于sender,个事件的触发者,一般指向的是一个控件,但是对于eventargs,一般常用来传递鼠标位置等信息,下面就自定义事件传值就是通过eventargs来实现。
基础篇
通过eventargs来实现传值,我们首先需要创建一个类,继承eventargs,我们可以将需要传递的数据,直接在类里面定义成属性,这里以传递一个布尔(没有再最终的代码内使用)、一个浮点数,一个字符串为例,代码如下所示:
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传输时间,代码如下:
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; } }
我们在主窗体中,实例化类,并进行事件绑定,看看能不能获取到传递的数据,代码如下:
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#如何在自定义事件里传递数据的文章就介绍到这了,更多相关c#自定义事件传递数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论