Article Options
Premium Sponsor
Premium Sponsor

 »  Home  »  Windows Development  »  Event Handling in VB.NET
Event Handling in VB.NET
by Ashish Jaiman | Published  03/16/2002 | Windows Development | Rating:
Ashish Jaiman

Ashish works as a Sr. Software Developer with Lexign Inc., an end-to-end trusted electronic transaction management software provider (http://www.lexign.com).

Ashish has 6 years of experience in designing and developing distributed systems, server technologies and web based software applications using Microsoft technologies, Java, XML and .NET. He holds MCSD (Microsoft Certified Software Developer) and SCJP (Sun Certified Java Programmer) certifications.

Contact Ashish at jaimanalwar@yahoo.com or ashish.jaiman@lexign.com.

 

View all articles by Ashish Jaiman...
Event Handling in VB.NET

Article source code: event.zip

Events in the .NET Framework are based on the delegate model. Delegates are type-safe Function Pointers or Callbacks. A delegate can reference both static and instance methods.

Implementation of an event is a three-step procedure

  1. Declare a delegate, if definition is not provided the .NET Framework would provide a default delegate implementation
  2. Declare the event signature using Event keyword and raise the event using RaiseEvent statement
  3. Handle the event by declaring an event receiver, often called event handler, which is a subroutine that responds to the event.

Declare a delegate

Delegate is a class that can hold reference to a method. Delegate class has signature, and it can hold references only to methods that match its signature. Delegate can be declared as

Delegate Sub sampleDel(ByVal Cancel As Boolean)

Any method that has same signature can be attached to this delegate; procedure that would have the same signature can handle this event.

Declare Event and Raise It

Event can be declared in three ways:

evtSample As sampleDel - mechanism to register the event handler for this type of declaration is to be provided by the class declaring the event. The event is implemented by using explicitly declared delegate. The event is raised by making a call to evtSample.

Public Event evtSample as sampleDel - event handler can be registered by using AddHandler method in the Class that would provide the Handler. The event is implemented by using the above-declared delegate. The event is raised by making a call to RaiseEvent.

Public Event evtSample(Cancel as Boolean) - event handler procedure would be registered by using Handles keyword in the declaration itself. The event is implemented by using implicitly declared delegate by the framework. The event is raised by making a call to RaiseEvent.

Handle the Event

Declaring a sub and either attaching it to the delegate or registering with the event declaring class can handle the event.

Example

The example shown declares a delegate in class CTimer and also declares three events in the class using all the aforementioned declarations. The class also provides mechanism to register event and raises events with intervals simulating 5, 10 and 30 units of the interval. Another class CClock is defined that has members to handle the RaisedEvents from CTimer class.

To run the sample from command line use - vbc /out:Event.exe Event.vb

Imports System

Public Class CTimer

    Delegate Sub SecondDel(ByVal xintTime As Integer)
    Private evtSecond As SecondDel
    Public Event evtMinute As SecondDel
    Public Event evtHour(ByVal xHour As Integer)
    public Shared lngSeconds As Long
    
    Public Sub Register(ByVal objSecond As SecondDel)
        evtSecond = evtSecond.Combine(evtSecondobjSecond)
    End Sub
    
    Public Sub OnTimer()
        lngSeconds = lngSeconds + 1
        If lngSeconds Mod 5 = 0 Then
            evtSecond(lngSeconds)
        End If
        If lngSeconds Mod 10 = 0 Then
            RaiseEvent evtMinute(lngSeconds)
        End If
        If lngSeconds Mod 30 = 0 Then
            RaiseEvent evtHour(lngSeconds)
        End If
    End Sub

End Class

Public Class CClock
    
    Private WithEvents mobjTimer As CTimer
    
    Sub New()
        mobjTimer = New CTimer()
        mobjTimer.Register(New CTimer.SecondDel(AddressOf SecondEvent))
        AddHandler mobjTimer.evtMinuteAddressOf MinuteEvent
        While (mobjTimer.lngSeconds < 60)
            mobjTimer.OnTimer()
            System.Threading.Thread.Sleep(100)
        End While
    End Sub
    
    Private Sub SecondEvent(ByVal xintTime As Integer)
        Console.WriteLine("Second's Event")
    End Sub

    Private Sub MinuteEvent(ByVal xintTime As Integer)
        Console.WriteLine("Minute's Event")
    End Sub

    Private Sub mobjTimer_evtHour(ByVal xintTime As Integer_
            Handles mobjTimer.evtHour
        Console.WriteLine("Hour's Event")
    End Sub

    Public Shared Sub Main()
        Dim cc1 = New CClock()
    End Sub

End Class
Generated using PrettyCode.Encoder
How would you rate the quality of this article?
1 2 3 4 5
Poor Excellent
Tell us why you rated this way (optional):

Article Rating
The average rating is: No-one else has rated this article yet.

Article rating:3.47727272727272 out of 5
 44 people have rated this page
Article Score43367
Related Articles
Comments    Submit Comment

Comment #1  (Posted by Parvesh on 02/05/2005)
Rating
it's good. i got some help but not full.
thx.
 
Comment #2  (Posted by pp on 02/05/2005)

fffffffffffffff
 
Comment #3  (Posted by an unknown user on 05/06/2005)
Rating
did not provide example for: Public Event evtSample(Cancel as Boolean)
 
Comment #4  (Posted by Martin on 10/02/2005)
Rating
This example only substitutes the event arguments (see minutes and seconds event) for the delegate type.
I don't see an advantage, but it is one more way to use delegates that I had not seen before. Probably the most common way to use delgates is asynchronous processing. After that, just expose the delegate to clients and let them pass in their own sub to callback, especially in a nested callback architecture. Anyway, this was a good piece of code to learn from.
 
Comment #5  (Posted by an unknown user on 10/24/2005)
Rating
Check here for a more nooby explanation:
http://abstractvb.com/code.asp?A=1084
 
Comment #6  (Posted by an unknown user on 12/07/2005)
Rating
simply Explaining The Power Full NEss
 
Comment #7  (Posted by Muralidhar on 12/07/2005)
Rating
Simply Explaining the power of Events & Delegates
 
Comment #8  (Posted by an unknown user on 12/07/2005)
Rating
simply Explaining The Power Full NEss
 
Comment #9  (Posted by an unknown user on 12/13/2005)
Rating
OK GOOD
 
Comment #10  (Posted by an unknown user on 02/06/2006)
Rating
Easy Sample to Understand Delegate
 
Comment #11  (Posted by an unknown user on 04/20/2006)
Rating
hi , Very good article to understand Event handling. But can it be possible to write event handle to delegate that return value.That is possible in C# but can you help me how to implemet in VB.Net?
 
Comment #12  (Posted by an unknown user on 04/20/2006)
Rating
hi , Very good article to understand Event handling. But can it be possible to write event handle to delegate that return value.That is possible in C# but can you help me how to implemet in VB.Net?
 
Comment #13  (Posted by an unknown user on 12/21/2006)
Rating
vv.godd
 
Comment #14  (Posted by an unknown user on 02/10/2007)
Rating
too many errors...
 
Comment #15  (Posted by an unknown user on 07/06/2007)
Rating
Not clear for someone new to events.
 
Comment #16  (Posted by an unknown user on 08/30/2007)
Rating
Excellent article
 
Comment #17  (Posted by an unknown user on 09/04/2007)
Rating
way too vague to be helpful. Hard to follow how raiseEvent evtMinute ends up handled by sub MinuteEvent. What ties the two together?
 
Comment #18  (Posted by an unknown user on 11/10/2007)
Rating
AddHandler mobjTimer.evtMinute, AddressOf MinuteEvent

 
Comment #19  (Posted by an unknown user on 11/12/2007)
Rating
This is Ajith. This article example requires more explanation. But still it is good.
 
Comment #20  (Posted by an unknown user on 12/03/2007)
Rating
Can an event be cancelled after it is called?
 
Comment #21  (Posted by an unknown user on 12/07/2007)
Rating
what about the comments
 
Comment #22  (Posted by an unknown user on 01/20/2008)
Rating
Hello! Good Site! Thanks you! ynblvathavclu
 
Comment #23  (Posted by an unknown user on 04/05/2008)
Rating
COMPILE THE CODE IDIOT
 
Comment #24  (Posted by an unknown user on 04/23/2008)
Rating
Spot on. Concise
 
Sponsored Links