Resetting ListIndex Property Generates Click Event

ID Number: Q79241

1.00

WINDOWS

Summary:

Resetting the ListIndex property of a list box, combo box, directory

list box, or a file list box at run time generates a Click event for

the control. For a drive list box, resetting the ListIndex property

generates a Change event.

This is a result of the Windows subclass definition for these

controls. When an item in one of these list boxes is selected, a Click

event (or Change event for drive list box) occurs and the ListIndex

property is updated. Conversely, when the ListIndex property is

changed, a message occurs, generating the corresponding event.

This behavior is not documented in the Visual Basic documentation or

online Help.

This information applies to the Microsoft Visual Basic programming

system version 1.0 for Windows.

More Information:

This undocumented behavior can cause some unexpected results. For

example, if code in a Click (or Change) event procedure is assigning

the selected items in the list box to an array or directly to the Text

property of another control, resetting the ListIndex property will

cause another such assignment, but with the new item.

If the ListIndex is reset to -1, a null item will be assigned by the

code because that setting indicates no item is selected.

To demonstrate this behavior, do the following:

1. Run Visual Basic, or from the File menu, choose New Project if

Visual Basic is already running. Form1 will be created by default.

2. Put a combo box (Combo1) on Form1.

3. Add a text box (Text1) to Form1.

4. Add a command button (Command1) to Form1.

5. Add the following code to the Click event for the list box chosen:

Sub Combo1_Click ()

text1.text = combo1.text

End Sub

Note: For drive and directory list boxes, the assignment would be

text1.text=drive1.list(drive1.ListIndex)

-or-

text1.text=dir1.list(dir1.ListIndex)

Add the following code to the Click event procedure for Command1:

Sub Command1_Click ()

combo1.ListIndex = -1

End Sub

Add the following code to the Form_Load event procedure of Form1:

Sub Form_Load ()

For n = 1 To 10

combo1.AddItem Format$(n, "0")

Next

End Sub

Run the program. Notice that when the Command1 button is pressed, the

list box is updated as expected, the code in the Click event procedure

for the list box is executed, and the Text property of the text box is

changed.

Reference(s):

"Programming Windows: the Microsoft Guide to Writing Applications for

Windows 3," by Charles Petzold, Microsoft Press, 1990

"Microsoft Windows Software Development Kit: Reference Volume 1,"

version 3.0

WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit

Additional reference words: 1.00