Control Events Windows Forms II: Controls, Common Dialog Boxes, and Menus

204

5.2 Control Events

Controls on a form are represented in code as fields—one field for each control. For example, when the Visual Studio .NET Windows Forms Designer is used to add a text box to a form, the following declaration is added to the form class: Private WithEvents TextBox1 As System.Windows.Forms.TextBox This declaration doesnt instantiate the control; it only defines a field that can hold a reference to a control of type TextBox. The control is instantiated in the InitializeComponent subroutine, which is called in the Form classs constructor. The code that instantiates the control looks like this: Me.TextBox1 = New System.Windows.Forms.TextBox As discussed in Chapt er 2 , when a field declaration includes the WithEvents keyword, the parent class can handle events that the referenced object raises. To do so, the parent class must define a handler method having the appropriate signature, and the definition of the method must include a Handles clause to link the method to the appropriate event on the appropriate object. For example, here is the definition of a handler method for the Click event of TextBox1: Private Sub TextBox1_Click _ ByVal sender As Object, _ ByVal e As System.EventArgs _ Handles TextBox1.Click ... End Sub The event-handler method can be given any name, but it is a common convention to use a name of the form FieldName_EventName . The event-handler methods signature must correspond to the signature of the event being handled. By convention, event signatures have two parameters: sender and e . The sender parameter is always of type Object and holds a reference to the object that raised the event. The e parameter is of type EventArgs—or of a type that inherits from EventArgs—and holds a reference to an object that provides any extra information needed for the event. Events that pass a generic EventArgs argument have no event information to pass. Events that pass an argument of an EventArgs-derived type pass additional information within the fields of the passed object. The correct signature for handling a specific event can be determined either by referring to the controls documentation or by using Visual Studio .NETs built-in object browser. In addition, the Visual Studio .NET Windows Forms Designer can automatically generate a handler-method declaration for any event exposed by any control on a given form.

5.3 Form and Control Layout