在C#中,一个类可以有域(Fields)、属性(Properties)、方法(Methods)、索引(Indexs)、事件(Events)等成员,其中事件(Events)成员就是用来声明一个类事件的。在类中声明一个事件成员一般采用如下的语法形式:public event 代表名 事件名。
1.一个简单的委托
delegate int DelegateOperation(int i1, int i2);
static void Main(string[] args)
{
DelegateOperation do1 = new DelegateOperation(Add);
Console.WriteLine(do1(100, 200));
Console.ReadLine();
}
public static int Add(int m, int n)
{
return m + n;
}
根据委托的定义,我们可以知道这段代码的将结果。DelegateOperation-->Add(int m, int n)-->Add(100, 200)。就是这样的一个流程走下来。
2.事件的实现过程
private void button33_Click(object sender, EventArgs e)
{
delegateClass dc = new delegateClass();
dc.RegisterOK += new delegateClass.DelegateRegisterOkEvent(s1_RegisterOK);
dc.Register();
}
void s1_RegisterOK()
{
MessageBox.Show("触发RegisterOK事件");
}
class delegateClass
{
public delegate void DelegateRegisterOkEvent();
public event DelegateRegisterOkEvent RegisterOK;
public void Register()
{
MessageBox.Show("调用RegisterOK事件.");
RegisterOK();
}
}
下面的这段代码是一个还有委托和事件的类,上面的代码是放在main函数中的。dc.Register()-->RegisterOK()-->s1_RegisterOK-->("触发RegisterOK事件")。
3.C#中预定义事件处理方式
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {
}
this.textBox1.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
可能大家发现在C#中有些事件和前面的似乎不太一样。例如
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
}
this.textBox1.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
这里使用了KeyPressEventArgs而不是EventArgs作为参数。这里使用了KeyEventHandler委托,而不是EventHandler委托。
KeyPressEventArgs是EventArgs的派生类,而KeyEventHandler的声明如下
public delegate void KeyEventHandler( object sender , KeyEventArgs e );
是参数为KeyEventArgs的委托。那为什么KeyPress事件要这么做呢,我们可以从两个类的构造函数来找答案。
public EventArgs();
public KeyPressEventArgs(char keyChar);
这里的keyData是什么,是用来传递我们按下了哪个键的,哈。
我在KeyEventArgs中又发现了属性
public char KeyChar { get; }
进一步证明了我的理论。下面我们来做一个类似的例子来帮助理解。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fangyuan303687320/archive/2010/01/02/5122103.aspx
可能大家发现在C#中有些事件和前面的似乎不太一样。 这里使用了KeyPressEventArgs而不是EventArgs作为参数。这里使用了KeyEventHandler委托,而不是EventHandler委托。KeyPressEventArgs是EventArgs的派生类,而KeyEventHandler的声明如下public delegate void KeyEventHandler( object sender , KeyEventArgs e );
4.事件的参数的使用
如上面的例子所说:
public class KeyPressEventArgs : EventArgs
{
// 摘要:
// 初始化 System.Windows.Forms.KeyPressEventArgs 类的新实例。
//
// 参数:
// keyChar:
// 与用户按下的键相对应的 ASCII 字符。
public KeyPressEventArgs(char keyChar);
// 摘要:
// 获取或设置一个值,该值指示是否处理过 System.Windows.Forms.Control.KeyPress 事件。
//
// 返回结果:
// 如果处理过事件,则为 true;否则为 false。
public bool Handled { get; set; }
//
// 摘要:
// 获取或设置与按下的键对应的字符。
//
// 返回结果:
// 撰写的 ASCII 字符。例如,如果用户按下 Shift + K,则该属性返回一个大写的 K。
public char KeyChar { get; set; }
}
这里KeyPressEventArgs扩展了EventArgs。增加了Handled和KeyChar两个属性。这样方便在触发这个事件的时候获取更多的信息。
作者:石世特
出处:http://www.cnblogs.com/TivonStone/
希望本文对你有所帮助,想转随便转,心情好的话给我的文章留个链接.o(. .)o