编程之委托与事件

图片 1public void button1_Click(object sender,EventArgs e)
图片 2
图片 3  //图片 4实现略
图片 5}
图片 6

     这就完成了一个完整的事件机制,详细代码如下:

图片 7图片 8MyText
 1图片 9using System;
 2图片 10using System.Collections.Generic;
 3图片 11using System.Text;
 4图片 12
 5图片 13namespace EventExample1
 6图片 14图片 15图片 16{
 7图片 17    public class MyText
 8图片 18图片 19    图片 20{
 9图片 17        //定义事件委托
10图片 17        public delegate void ChangedEventHandler(object sender, EventArgs e);
11图片 17
12图片 17        //定义一个委托类型事件
13图片 17        public event ChangedEventHandler Changed;
14图片 17
15图片 17        //用于触发Changed事件
16图片 17        protected virtual void OnChanged(EventArgs e)
17图片 29图片 30        图片 31{
18图片 17            if (this.Changed != null)
19图片 33图片 34            图片 35{
20图片 17                this.Changed(this, e);
21图片 37            }
22图片 38        }
23图片 17
24图片 17        private string _text = string.Empty;
25图片 17        public string Text
26图片 42图片 43        图片 44{
27图片 45图片 46            get 图片 47{ return this._text; }
28图片 17            set 
29图片 49图片 50            图片 51{
30图片 17                this._text = value;
31图片 17                this.OnChanged(new EventArgs());
32图片 54            }
33图片 55        }
34图片 56    }
35图片 57}
36图片 58

  
   –激发事件:单击鼠标

图片 59//事件处理程序
图片 60private static void myText_Chenged(object sender, EventArgs e)
图片 61图片 62图片 63{
图片 17    Console.WriteLine(“Text属性的值改变:{0}”, ((MyText)sender).Text);
图片 65}

图片 66this.button1.Click+=new EventHandler(this.button1_Click);

   五.事件处理程序

   三.触发事件

   
  –执行事件

   –事件的四个要素:
    -定义事件
    -激发事件
    -监听事件
    -执行事件

  
    二.定义委托及事件

图片 67//定义事件委托
图片 68public delegate void ChangedEventHandler(object sender, EventArgs e);

   
上面这个button的Click事件是我们最常见的,这里展示出了整个事件过程。接下来我们来看看一个简单的事件实例。

 1图片 69namespace EventEmail
 2图片 70图片 71图片 72{
 3图片 17    //事件传递的消息定义
 4图片 17    public class MailMsgEventArgs:EventArgs
 5图片 75图片 76    图片 77{
 6图片 17        public readonly string from, to, subject, body;
 7图片 17
 8图片 17        public MailMsgEventArgs(string from, string to, string subject, string body)
 9图片 81图片 82        图片 83{
10图片 17            this.from = from;
11图片 17            this.to = to;
12图片 17            this.subject = subject;
13图片 17            this.body = body;
14图片 88        }
15图片 89    }
16图片 90}

  4.实例解说
     现在我们需要设计一个电子邮件程序,当收到电子邮件时,希望将该消息转发到传真机(Fax)和手机(CallPhone);
     一.我们需要传递消息则需要定义事件传递的消息类吧,定义如下:

 1图片 91namespace EventEmail
 2图片 92图片 93图片 94{
 3图片 17    //定义一委托
 4图片 17    public delegate void MailMsgEventHandler(object sender,MailMsgEventArgs e);
 5图片 17
 6图片 98

图片 99图片 100Program
 1图片 101using System;
 2图片 102using System.Collections.Generic;
 3图片 103using System.Text;
 4图片 104
 5图片 105namespace EventExample1
 6图片 106图片 107图片 108{
 7图片 17    class Program
 8图片 110图片 111    图片 112{
 9图片 17        static void Main(string[] args)
10图片 114图片 115        图片 116{
11图片 17            MyText myText = new MyText();
12图片 17            myText.Changed += new MyText.ChangedEventHandler(myText_Chenged);
13图片 17
14图片 17            string str = string.Empty;
15图片 17            while (str != “exit”)
16图片 122图片 123            图片 124{
17图片 17                Console.Write(“请输入一个字符串:”);
18图片 17                str = Console.ReadLine();
19图片 17                myText.Text = str;
20图片 128            }
21图片 129        }
22图片 17
23图片 17        //事件处理程序
24图片 17        private static void myText_Chenged(object sender, EventArgs e)
25图片 133图片 134        图片 135<%2

   四.侦听事件

   在介绍事件之前我们先来了解几个事件的基本概念和几个重要素:
   –事件的本质
    -事件是特殊的委托实例
    -事件关键字:event

图片 136//用于触发Changed事件
图片 137protected virtual void OnChanged(EventArgs e)
图片 138图片 139图片 140{
图片 17    if (this.Changed != null)
图片 142图片 143    图片 144{
图片 17         this.Changed(this, e);
图片 146    }
图片 147}

    二.定义事件

图片 148public delegate void MailMsgEventHandler(object sender,MailMsgEventArgs e);
图片 149public event MailMsgEventHandler MailMsg;

图片 150public delegate void EventHandler(object sender,EventArgs e);
图片 151public event EventHandler Click;
图片 152

  2.事件分析
   
在.NET中,很多控件都有相关的事件,如Button的Click事件,它能响应鼠标的单击事件。
    –定义事件

   –监听事件

图片 153//定义一个委托类型事件
图片 154public event ChangedEventHandler Changed;

我在上一篇文章(C#编程之委托与事件(一)
)中通过示例结合的方法介绍了委托,在本文中,我同样以代码示例的方式来介绍C#里的事件机制。

图片 155MyText myText = new MyText();
图片 156myText.Changed += new MyText.ChangedEventHandler(myText_Chenged);

  3.简单实例–怎样定义一个完整的事件机制
    一.定义委托

      完整代码定义如下:

二、事件   1.了解概念
     事件就是当对象或类状态发生改变时,对象或类发出的信息或通知。发出信息的对象或类称为”事件源”,对事件进行处理的方法称为”接收者”,通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装。

发表评论

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