第1个回答 2008-04-06
"事件驱动机制"牵扯到委托,事件,事件触发器,事件处理器。首先需明白:
1.委托就是一个类。
2.事件是委托未实例化的一个对象。
3.事件处理器在宿主类中(Form1中,即窗体类中)。
4.事件和事件触发器在类中(自定义的类Demo中)。
具体看代码:
namespace EventDemo
{ //委托
public delegate void EnumertorEventHandler( object sender , MessageEventArgs e ) ;/*事件消息传递器:MessageEventArgs。*/
public partial class Form1 : Form
{
Demo demo;
public Form1()
{
InitializeComponent();
demo = new Demo();
demo.MessageEvent += new EnumertorEventHandler(demo_MessageEvent);
}
//事件处理器--》demo_MessageEvent.
void demo_MessageEvent(object sender, MessageEventArgs e) //4、
{
this.textBox1.Text = e.Message; //5、最后在textBox1中显示“循环到10了”。
}
private void button1_Click(object sender, EventArgs e)
{
demo.ShowMessageBox(); //1、点击按钮button1调用方法ShowMessageBox()
}
public class Demo
{
//事件:MessageEvent
public event EnumertorEventHandler MessageEvent;
//事件触发器
protected virtual void OnMessageEvent(MessageEventArgs e)
{
if (this.MessageEvent != null)
{
this.MessageEvent(this, e); //3、此处的两参数传到上面4处的“事件处理器”中。
}
}
//方法
public void ShowMessageBox()
{
for (int count = 0; count < 100; count++)
{
if (count == 10)
{
MessageEventArgs e = new MessageEventArgs();
e.Message = "循环到10了";
this.OnMessageEvent(e); //2、由1到此,此处参数e传到上面“事件触发器”中。
}
}
}
}
//事件消息传递器:MessageEventArgs。
public class MessageEventArgs : EventArgs
{
private string message;
public string Message
{
get { return this.message; }
set { this.message = value; }
}
}
}