65.9K
CodeProject is changing. Read more.
Home

Turorial: Subclass the Listbox to handle Events

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.81/5 (12 votes)

Jul 18, 2002

2 min read

viewsIcon

102214

downloadIcon

224

A Visual Basic .NET tutorial on subclassing the ListBox control and intercepting ListBox events

Sample Image

Introduction

This tutorial walks the programmer through creating a sub-classed ListBox control which intercepts Events and performs additional actions before passing the Event along for further processing by the control itself.

  1. Open Visual Studio .NET

  2. Start a "New" VB Windows Application project

  3. Project name does not matter

  4. Once open, add a standard ListBox control to Form1

  5. In the Solution Explorer, notice the icon () being shown for Form1.vb. In a moment you will see the icon change.

  6. Add the following items to the Collection property of ListBox1

    Apple
    Banana
    Berry
    Fig
    Grape
    Melon
    Orange
    Peach
    Pear

  7. Open the code view for Form1

  8. Expand the Form1 region "Windows Form Designer generated code"

  9. Preform a Search-and-Replace

  10. Search for: ListBox
    Replace with: MyListBox
    Match Case: Unchecked-OFF
    Match Whole Word: Unchecked-OFF
    Search Hidden Text: Checked-ON
    Search: Current Document

    Click: Replace ALL



  11. Close the Search-n-Replace window

  12. In the "Windows Form Designer generated code" region, locate the following line:
    Friend WithEvents MyListBox1 As System.Windows.Forms.MyListBox
  13. Notice the line shows an error (with squiggly underline) at the System.Windows.Forms.MyListBox because MyListBox is not a member of System.Windows.Forms object.

  14. Alter the line to read:
    Friend WithEvents MyListBox1 As MyListBox
  15. Note: MyListBox will still appear as error with squiggly underline because the assembly containing the declaration has not yet been compiled.

  16. A few lines further down, locate the line:
    Me.MyListBox1 = New System.Windows.Forms.MyListBox()
  17. Alter the line to read:
    Me.MyListBox1 = New MyListBox()
  18. Note: MyListBox will still appear as error with squiggly underline because the assembly containing the declaration has not yet been compiled.

  19. Open the Designer view and notice your ListBox control has vanished.

  20. Add the new MyListBox Class declaration below (You are adding a new class to the project so be sure to place the new class outside the Public Class Form1 declaration)
    Public Class MyListBox
       Inherits System.Windows.Forms.ListBox
       Public Shadows Event Click(ByVal sender As Object, ByVal e As EventArgs, _
                                  ByVal i As Integer)
       Public Shadows Event Resize(ByVal sender As Object, ByVal e As EventArgs, _
                                   ByVal i As Integer)
       Private WithEvents mListBox As System.Windows.Forms.ListBox
    
       Public Sub New()
          MyBase.New()
          mListBox = Me
       End Sub
    
       Private Sub mListBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
         Handles mListBox.Click
          MsgBox("ListBox Clicked")
          RaiseEvent Click(sender, e, 1)
       End Sub
    
       Private Sub mListBox_Resize(ByVal sender As Object, ByVal e As System.EventArgs) _
         Handles mListBox.Resize
          RaiseEvent Resize(sender, e, 1)
       End Sub
    End Class
  21. Open the Designer View. You will receive two error messages. You are receiving these errors because the assembly containing the declaration has not yet been compiled.

  22. Rebuild the solution.

  23. Notice the Solution Explorer Icon () for Form1.vb has changed.

  24. Notice the list box still does not show in the design window.

  25. Close the Design window and re-open it.

  26. The MyListBox now shows.

  27. The ListBox control has been subclassed.

To test:

  1. Run the application.
  2. Click on any item in the list box
  3. The Click_Event is intercepted by your sub-class and a message box is shown, then the event is passed up the chain.