Share via


Eventos y control de eventos para usuarios de Visual Basic 6.0

Actualización: noviembre 2007

Si está familiarizado con los eventos y el control de eventos de Visual Basic 6.0, a primera vista, el modelo de eventos de Visual Basic 2008 puede parecerle confuso, pero a la larga resulta mucho más sencillo y eficaz.

Diferencias conceptuales

En Visual Basic 6.0, los eventos están ligados a objetos específicos y tienen su código de control de eventos. Por ejemplo, en un formulario con un botón y un menú, cada uno tiene su evento Click; hay que escribir código para cada uno en el controlador de eventos, aunque los dos realicen la misma función.

' Visual Basic 6.0 
Private Sub HelpButton_Click()
    HelpButton.Caption = "Help me!"
End Sub
Private Sub HelpMenu_Click()
    HelpMenu.Caption = "Help me!"
End Sub

En Visual Basic 2008, los eventos están ligados a controladores de eventos mediante delegados, lo que permite crear un único controlador de eventos para varios objetos.

Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles HelpButton.Click, HelpMenu.Click
    sender.Text = "Help me!"
End Sub

En el ejemplo anterior, observe que la declaración del evento tiene una cláusula Handles que define los eventos que se van a controlar (en este caso, se trata de eventos Click en los dos objetos HelpButton y HelpMenu). Los objetos y eventos no tienen que ser del mismo tipo; por ejemplo, puede tener un controlador de eventos simple que controle el evento Click de un botón, el evento DoubleClick de un cuadro de texto y el evento Tick de un temporizador.

Observe también que la declaración del evento contiene dos parámetros: ByVal sender As Object y ByVal e As System.EventArgs. El primer parámetro, sender, proporciona una referencia al objeto que desencadenó el evento. El segundo parámetro, e, transfiere un objeto específico al evento que se está controlando. Al hacer referencia a las propiedades del objeto (y, a veces, a sus métodos), puede obtener información tal como la posición del mouse para los eventos del mouse o los datos que se están transfiriendo en los eventos de arrastrar y colocar.

En el ejemplo siguiente, el controlador de eventos MouseDown utiliza el parámetro sender para determinar el tipo de objeto que generó el evento, y si el objeto es un a PictureBox, el parámetro e se utiliza para desplazar una etiqueta a la ubicación en la que se produjo el clic. Para duplicar este ejemplo, agregue dos controles PictureBox y un control Label a un formulario.

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, _
PictureBox1.MouseDown, PictureBox2.MouseDown

    If TypeOf sender Is PictureBox Then
        Label1.Location = sender.Location + e.Location
    Else
        MsgBox("Please click a picture")
    End If
End Sub

Habitualmente, cada evento produce un controlador de eventos con un tipo de objeto de evento diferente para el segundo parámetro. Algunos controladores de eventos, como los de los eventos MouseDown y MouseUp, tienen el mismo tipo de objeto, MouseEventArgs, para el segundo parámetro. Para estos tipos de eventos, se puede utilizar el mismo controlador de eventos para controlar ambos eventos.

Para los eventos que transfieren tipos de objetos de eventos diferentes, deben crearse controladores de eventos independientes. Por ejemplo, el evento TextChanged de un control TextBox transfiere el objeto de evento genérico EventArgs, mientras que el evento MouseDown transfiere el objeto de evento MouseEventArgs, que es más especializado. El objeto MouseEventArgs contiene propiedades que son específicas de los eventos del mouse, como Button, que determina qué botón del mouse se ha presionado; estas propiedades no se aplican a un control TextBox y podría producirse un error si se intenta establecer referencias a ellas.

Además de las diferencias conceptuales en el control de eventos, los nombres y el comportamiento de algunos eventos para varios objetos son diferentes en Visual Basic 2008. Para obtener más información, vea Controles de formularios Windows Forms para usuarios de Visual Basic 6.0.

Vea también

Conceptos

Información general sobre controladores de eventos (Formularios Windows Forms)

Otros recursos

Crear controladores de eventos en formularios Windows Forms