Understanding Custom Events using Visual Basic.NET 2005 - Handling events dynamically in Visual Basic 2005
(Page 5 of 5 )
In previous section, if you observe the following statement, it is declared at the class level, which means that it is outside all the methods:
WithEvents obj As New Sample01
This may not be convenient in every situation as we do create a lot of objects and remove them every time, especially in loops. The "WithEvents" cannot be available as part of method in a class. It can only be available with class level variables/objects.
To solve the above situation, the "AddHandler" comes to the rescue. Let us rewrite our testing class as follows:
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim obj As New Sample01
AddHandler obj.CalculationStatus, AddressOf Msg_CalculationStatus
obj.X = 10
obj.Y = 5
Me.lblValue.Text = obj.GetCalculatedValue
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim obj As New Sample01
AddHandler obj.CalculationStatus, AddressOf Msg_CalculationStatus
obj.X = 10
obj.Y = 0
Me.lblValue.Text = obj.GetCalculatedValue
End Sub
Public Sub Msg_CalculationStatus(ByVal Msg As String)
Me.lblMsg.Text = Msg
End Sub
End Class
From the above class, you can observe that no instance is declared at the class level. The object instantiation is done separately in each method and they get automatically erased from memory once the execution completes.
To attach a method to an object dynamically (to handle an event), we should use the "AddHandler" statement as follows:
AddHandler obj.CalculationStatus, AddressOf Msg_CalculationStatus
The above statement says that the "CalculationStatus" event of the "obj" object will be handled by the "Msg_CalculationStatus" method. And further, the same method can handle any number of events, even when attached to several objects. Make sure that the signature of this method matches with that of the event.
Finally, you can dynamically remove the handler using "RemoveHandler," if it is already attached using "AddHandler".
In my next article, I shall introduce Delegates in Visual Basic 2005. I hope you enjoyed the article and any suggestions, bugs, errors, enhancements etc. are highly appreciated at http://jagchat.spaces.live.com
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |