3.3 Event ArgumentsEvents are handled by delegates. Essentially, a delegate is an object that encapsulates the description of a method to which you may delegate responsibility for handling the event.
Event handlers must always take two parameters and return nothing (in VB.NET, use a Sub, in C# return void). The first parameter represents the object raising the event. The second, called the event argument, contains information specific to the event, if any. For most events, the event argument is of type EventArgs, which does not expose any properties. So, the general prototype for an event in Visual Basic is: Private Sub EventName(ByVal sender As Object, _ ByVal e As EventArgs) The general prototype for an event in C# is: private void EventName (object sender, EventArgs e) For some controls, the event argument may be of a type derived from EventArgs and may expose properties specific to that event type. For example, the AdRotator control's AdCreated event handler receives an argument of type AdCreatedEventArgs, which has the properties AdProperties, AlternateText, ImageUrl, and NavigateUrl. Chapter 5 details the specifics of the event argument for each control. Note that when using Visual Studio .NET, the IDE often inserts qualifying namespaces in front of parameter types in event handler declarations. These are redundant, as long as the relevant namespace is already referenced in the project using a using statement in C# or an Imports statement in VB.NET. For example, the default Page_Load event handler in VB.NET inserted by Visual Studio .NET looks like: Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load The following declaration works equally as well, since the System namespace is automatically imported into ASP.NET applications: Private Sub Page_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load The default Page_Load event handler in C# inserted by Visual Studio .NET looks like: private void Page_Load(object sender, System.EventArgs e) However, all that is strictly necessary is: private void Page_Load(object sender, EventArgs e) |