C#自定义事件传值(c#自定义事件监控变量变化)
对于一般的系统事件,是有两个参数的,一个是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
{
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();
}
}
}