在C#入门系列的这个部分,我将介绍在Windows窗体环境下使用事件的一些基本要点,还要介绍如何使用Visual Studio增加进程来处理一个窗体事件,也叫做事件句柄。我还会探查事件方法背后的代码,这样你就能够严格地在代码编辑器里增加一个事件,而不用使用可视化开发的环境。
本文是“C#新手”系列的一部分,这个系列目的是为了减少学习的困难,帮助新手顺利地开始使用C#。本系列的第一篇文章讲解了使用窗体类的基础。在我们的第二篇文章里,我们向你演示了如何打开窗体的特定实例——这是创建多窗体Windows应用程序时至关重要的技能。
事件就是在其被触发或启动时所执行的代码。事件是由用户的动作、程序代码或者系统启动的。
从一个更加正式的角度——以及C#的角度——来看,事件是一个对象成员,明确地讲就是方法。(本文主要关注的是Windows的窗体,但是我们要讨论的规则同样能够用于对象,例如按钮及其他控件。
事件方法,或者叫事件过程,包含了带有两个自变量的过程名。第一个自变量,或者叫参数,是启动事件的对象;第二个参数是System.EventArgs类型。此外你必须使用+=操作符将事件方法作为代表连起来,这个代表是替代另一个方法的方法。你也许熟悉+=在C#里的加派操作数。
要让这个问题具体化,我们还是来看看对一个叫做Form1的窗体类的点击事件是如何工作的。(你会在InitializeComponent方法里找个这行代码,这个方法在Windows窗体设计器所生成代码的“隐藏”区域里):
this.Click += new System.EventHandler(this.Form1_Click);
和这个事件方法相关的框架是:
private void Form1_Click(object sender, System.EventArgs
e) {
}
从一个事件调用另一个事件是很简单的。例如,以下的代码是button1的Enter事件启动时弹出的一个信息框:
private void button1_Enter(object sender, System.EventArgs
e) {
MessageBox.Show ("The Button's Enter event has been fired",
"C# for Newbies", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
要从另一个事件里调用这个button1 Enter事件,需要在那个事件里加入一个对button1_Enter方法的调用。在窗体的DoubleClick事件中,代码是:
private void Form1_DoubleClick(object sender, System.EventArgs
e) {
button1_Enter (sender, e);
}
现在当这个窗体被双击时,通过按钮的Enter事件启动的信息框就会显示出来,如图A。
图A
要发出一个像这样的通知,使用事件是很方便的
你可能没有System.EventArgs来传递事件;例如,你也许会在事件之外调用它。但是这不是个大问题,因为你可以创建一个,再像下面这样调用一个事件方法:
System.EventArgs g = new System.EventArgs();
button1_Enter (this, g);