System.EventHandler是在事件处理过程中用于Windows Forms(和APS.NET)API的一种委托类型。如你所见,此委托只能指向第一个参数是System.Object类型的方法,此参数代表触发事件的类型。例如,我们打算改写mnuFileExit_Click()方法的实现,代码如下:
{
MessageBox.Show( string .Format( " {0} sent this event " , sender.ToString()));
Application.Exit();
}
我们可以确定是mnuFileExit触发了事件,因为在消息框中显示了字符串。
你可能很想知道第二个参数System.EventArgs是做什么用的。事实上System.EventArgs只是继承了Object对象,并且提供了一些额外的功能。
{
public static readonly EventArgs Empty;
static EventArgs();
public EventArgs();
}
然而,在全部的.NET事件处理中,此类型非常有用,它将会有许多其他的派生类型(同样非常有用)。例如,通过扩展EventArgs,MouseEventArgs提供了关于鼠标当前状态的细节。同样通过扩展EventArgs,KeyEventArgs提供了键盘状态的细节(例如按了哪个键),PaintEventArgs提供了与图形相关的数据,诸如此类。你将会看到许多继承于EventArgs的类型(和使用它们的委托),不仅是在Windows Forms中,而且还会在WPF和ASP.NET API中。
许多情况下,只用简单的文本编辑器就可以把越来越多的功能加入到MainWindow中(如:状态栏、对话框等),但是最终我们会累到手抽筋,因为我们还不得不手动配置许多控件的逻辑。好在Visual Studio 2008提供了许多集成的设计器,可以替我们关照这些细节。