Turorial: Subclass the Listbox to handle Events






2.81/5 (12 votes)
Jul 18, 2002
2 min read

102214

224
A Visual Basic .NET tutorial on subclassing the ListBox control and intercepting ListBox events
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.
- Open Visual Studio .NET
- Start a "New"
VB Windows Application
project
- Project name does not matter
- Once open, add a standard
ListBox
control toForm1
- In the Solution Explorer, notice the icon (
) being shown for
Form1.vb
. In a moment you will see the icon change.
- Add the following items to the
Collection
property ofListBox1
Apple
Banana
Berry
Fig
Grape
Melon
Orange
Peach
Pear - Open the code view for
Form1
- Expand the
Form1
region "Windows Form Designer generated code"
- Preform a Search-and-Replace
- Close the Search-n-Replace window
- In the "Windows Form Designer generated code" region, locate the following
line:
Friend WithEvents MyListBox1 As System.Windows.Forms.MyListBox
- Notice the line shows an error (with squiggly underline) at the
System.Windows.Forms.MyListBox
becauseMyListBox
is not a member ofSystem.Windows.Forms
object.
-
Alter the line to read:
Friend WithEvents MyListBox1 As MyListBox
-
Note:
MyListBox
will still appear as error with squiggly underline because the assembly containing the declaration has not yet been compiled.
- A few lines further down, locate the line:
Me.MyListBox1 = New System.Windows.Forms.MyListBox()
- Alter the line to read:
Me.MyListBox1 = New MyListBox()
- Note:
MyListBox
will still appear as error with squiggly underline because the assembly containing the declaration has not yet been compiled.
- Open the Designer view and notice your
ListBox
control has vanished.
- 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 thePublic 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
- 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.
- Rebuild the solution.
- Notice the Solution Explorer Icon (
) for
Form1.vb
has changed.
- Notice the list box still does not show in the design window.
- Close the Design window and re-open it.
- The
MyListBox
now shows.
- The
ListBox
control has been subclassed.
Search for: | ListBox |
Replace with: | MyListBox |
Match Case: | Unchecked-OFF |
Match Whole Word: | Unchecked-OFF |
Search Hidden Text: | Checked-ON |
Search: | Current Document |
Click: |
To test:
- Run the application.
- Click on any item in the list box
- The
Click_Event
is intercepted by your sub-class and a message box is shown, then the event is passed up the chain.