这篇文章主要介绍“C#事件怎么自定义”,在日常操作中,相信很多人在C#事件怎么自定义问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#事件怎么自定义”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
事件,是C#编程模型中重要的一个概念,通过对事件的理解,可以更好的了解C#程序运行机制。C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。这非常类似设计模式中的观察者模式。
引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。
比如:构建一个winform应用,在窗体Form1简单放置一个按钮控件,然后,双击按钮,则可以进入代码视图中按钮click事件处理程序。
private void button1_Click(object sender, EventArgs e) { ///sender即表示事件源,e表示通过事件传递过来的消息 }
这时,还可以打开Form1.designer.cs,还可以找到如下代码:
this.button1.Click += new System.EventHandler(this.button1_Click);
这行代码表明,当前窗体注册了click事件(click就是Button对象的一个事件),并且用 button1_Click方法进行了处理。EventHandler是一个委托,关于委托可参见我的上一篇文章C#基础概念之委托。
以上是对C#事件的一些简单的解释。当然,我们也可以自定义事件。
自定义事件,分为如下几步:
第一步:首先在事件源对象定义事件
//定义事件 public event EventHandler myevnet;
第二步:在事件监听者,订阅事件
//事件注册 this.myevnet+=new EventHandler(MyEventHandler);
第三步:在事件监听者,编写事件处理代码:
/// <summary> /// 事件的处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MyEventHandler(object sender, EventArgs e) { MessageBox.Show("myevent is raised......."); }
第四步:在事件源对象引发事件
//判断事件是否被注册 if (myevnet != null) { //引发事件 myevnet(this.button1, new EventArgs()); }
这仅是个演示,供各位参考,下面给出完整代码,方便测试
简单自定义事件,完整代码:
public partial class Form1 : Form { //定义事件 public event EventHandler myevnet; public Form1() { InitializeComponent(); //事件注册 this.myevnet+=new EventHandler(MyEventHandler); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("button1_Click"); //判断事件是否被注册 if (myevnet != null) { //引发事件 myevnet(this.button1, new EventArgs()); } } /// <summary> /// 事件的处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MyEventHandler(object sender, EventArgs e) { MessageBox.Show("myevent is raised......."); } }
当然,真环境下,自定义事件要比这个复杂一些,下面再举一个例子,在事件引发时,传递自定义的消息。
首先要自定义一个事件消息类,这个类继承于EventArgs
然后自定义委托,来处理事件。完整代码如下:
事件源方面:
///自定义事件委托 public delegate void MyeventHandler(object sender, MyEventArgs e); public partial class AddGrade : Form { //声明事件 public event MyeventHandler myCustomevent; public AddGrade() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //dosomthing //事件引发 if (myCustomevent != null) { myCustomevent(this, new MyEventArgs() { Message = this.textBox1.Text }); } } } ///自定义事件消息类 public class MyEventArgs : EventArgs { public string Message { set; get; } }
事件监听者方面:
public partial class EventDemo : Form { public EventDemo() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { AddGrade addGrad = new AddGrade(); //注册事件 addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent); addGrad.Show(); } void addGrad_myCustomevent(object sender, MyEventArgs e) { //dosomthing MessageBox.Show(e.Message); } }
到此,关于“C#事件怎么自定义”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。