System.EventHandler是在事件处理过程中用于Windows Forms(和APS.NET)API的一种委托类型。如你所见,此委托只能指向第一个参数是System.Object类型的方法,此参数代表触发事件的类型。例如,我们打算改写mnuFileExit_Click()方法的实现,代码如下:

private void mnuFileExit_Click(object sender, EventArgs e)
{
    MessageBox.Show(
string.Format("{0} sent this event", sender.ToString()));
    Application.Exit();
}

 

我们可以确定是mnuFileExit触发了事件,因为在消息框中显示了字符串。

"Exit sent this event"

你可能很想知道第二个参数System.EventArgs是做什么用的。事实上System.EventArgs只是继承了Object对象,并且提供了一些额外的功能。

 

public class EventArgs
{
  
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提供了许多集成的设计器,可以替我们关照这些细节。

posted on 2009-06-09 11:50  钱途无梁  阅读(3705)  评论(2编辑  收藏  举报