Crear nuestros propios eventos

2178 vistas

Para gestionar los eventos en Visual Basic tendremos que realizar los siguientes pasos:

  • Crear un argumento personalizado si es necesario
  • Declarar un delegado en la clase que genera el evento
  • Declarar el evento en la clase que lo genera
  • Llamar al evento

Imaginemos la siguiente clase:



vbnet
  1. Public Class Persona
  2.  
  3.     Private m_Nombre, m_Apellido As String
  4.     Private m_BirthDay As Date
  5.  
  6.     Public Sub New(ByVal Nombre As String, ByVal Apellido As String, ByVal Birthday As Date)
  7.         m_Nombre = Nombre
  8.         m_Apellido = Apellido
  9.         m_BirthDay = Birthday
  10.     End Sub
  11.    
  12.     Public ReadOnly Property Identite() As String
  13.         Get
  14.             Return Me.m_Nombre & " " & Me.m_Apellido
  15.         End Get
  16.     End Property
  17.    
  18.     Public ReadOnly Property Age() As Int32
  19.         Get
  20.             Return DateDiff(DateInterval.Year, m_BirthDay, Now.Date, FirstDayOfWeek.Monday, FirstWeekOfYear.Jan1)
  21.         End Get
  22.     End Property
  23.  
  24. End Class



Queremos que se dispare un evento si es el cumpleaños del objeto persona. Para ello crearemos un argumento partucular llamado HappyBirthDayEventArgs que contendrá la edat de la persona:



vbnet
  1. Public Class HappyBirthDayEventArgs
  2.     Inherits System.EventArgs
  3.  
  4.     Private m_Age As Int32
  5.  
  6.     Public Sub New(ByVal MyAge As Int32)
  7.         m_Age = MyAge
  8.     End Sub
  9.  
  10.     Public ReadOnly Property Age() As Int32
  11.         Get
  12.             Return m_Age
  13.         End Get
  14.     End Property
  15. End Class



Ahora tendremos que añadir un delagado al inicio de la clase 'Persona'. Un delegado es el que permite hacer el enlace entre el evento y el gestionador del evento.
Por otro lado, también tendremos que declarar el evento en la clase.



vbnet
  1. Public Class Personne
  2.  
  3.     Delegate Sub HappyBirthDayEventHandler(ByVal sender As Object, ByVal e As HappyBirthDayEventArgs)
  4.     Public Event HappyBirthDayEvent As HappyBirthDayEventHandler
  5. ....



Vamos a modificar la propiedad Age de la clase Persona para lanzar el evento:



vbnet
  1. Public ReadOnly Property Age() As Int32
  2.     Get
  3.         If Me.m_BirthDay.Day = Now.Day AndAlso Me.m_BirthDay.Month = Now.Month Then
  4.             RaiseEvent HappyBirthDayEvent(Me, New HappyBirthDayEventArgs(DateDiff(DateInterval.Year, m_BirthDay, Now.Date, FirstDayOfWeek.Monday, FirstWeekOfYear.Jan1)))
  5.         End If
  6.         Return DateDiff(DateInterval.Year, m_BirthDay, Now.Date, FirstDayOfWeek.Monday, FirstWeekOfYear.Jan1)
  7.     End Get
  8. End Property



Ahora podemos enlazarnos al evento, por ejemplo:



vbnet
  1. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.     Dim bidou As New Persona("Rabilloud", "Jean-Marc", #10/12/1967#)
  3.     AddHandler bidou.HappyBirthDayEvent, AddressOf Cumpleanos
  4.     Dim MyAge As Int32 = bidou.Age
  5. End Sub
  6.  
  7. Private Sub Cumpleanos(ByVal sender As Object, ByVal e As HappyBirthDayEventArgs)
  8.     MsgBox("Hoy " & CType(sender, Persona).Identite & " tiene " & e.Age.ToString & " años")
  9. End Sub