* VB-CODE (2)
Tip 112: Preventing ListIndex Property from Triggering a Click Event
July 1, 1995
When you change the ListIndex property of a Combo Box control, the Click event is
automatically triggered. This article explains how to suppress this Click event.
Suppressing Click Events in Combo Box Controls
The Combo Box control in Microsoft® Visual Basic® lets you create a list of items
that the user can click to select. Within a Visual Basic program, you can select
a specific item in a Combo Box control by using its ListIndex property. However,
each time the ListIndex property is changed, a Click event is also triggered.
Each time an item is selected in a Combo Box control, a CB_SETCURSEL message is
sent to the control by the Windows® application programming interface (API). This
message selects or deselects the specific item in the Combo Box control.
To prevent a Click event from being triggered each time the ListIndex property is
changed, you need only send the CB_SETCURSEL message directly to the control. The
Click event is not generated, but the individual item is still selected or
The example program below shows how to set the ListIndex property of a Combo Box
control without generating a Click event.
1. Create a new project in Visual Basic. Form1 is created by default.
2. Add the following Constant and Declare statements to the General Declarations
section of Form1 (note that the Declare statement must be typed as one single
line of code):
Private Declare Function SendMessageByString Lib "User" Alias "SendMessage"
(ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal
lParam As String) As Integer
Const WM_USER = &H400
Const CB_SETCURSEL = (WM_USER + 14)
3. Add the following code to the Form_Load event for Form1:
Private Sub Form_Load()
Combo1.AddItem "Item #1"
Combo1.AddItem "Item #2"
Combo1.AddItem "Item #3"
4. Add a Combo Box control to Form1. Combo1 is created by default.
5. Add the following code to the Click event for Combo1:
Private Sub Combo1_Click()
MsgBox "Combo1 was Clicked!"
6. Add a Command Button control to Form1. Command1 is created by default. Set
its Caption property to "Will Click".
7. Add the following code to the Click event for Command1:
Private Sub Command1_Click()
Combo1.ListIndex = 1
8. Add a second Command Button control to Form1. Command2 is created by default.
Set its Caption property to "Will Not Click".
9. Add the following code to the Click event for Command2:
Private Sub Command2_Click()
SetComboListIndex Combo1, 1
10. Create a new function called SetComboListIndex. Add the following code to
Sub SetComboListIndex(cboCombo As ComboBox, iIndex As Integer)
Dim R As Integer
R = SendMessageByString(cboCombo.hWnd, CB_SETCURSEL, iIndex, "")
Run the example program by pressing the F5 function key. Click the "Will Click"
command button. A message box is displayed indicating that the Click event was
triggered when the ListIndex property was changed. Click the "Will Not Click"
command button. The item in the Combo Box is selected but a Click event is not
Knowledge Base Q79241. "BUG: Resetting ListIndex Property Generates Click Event."