Microsoft KB Archive/79241

= BUG: Resetting ListIndex Property Generates Click Event =

Article ID: 79241

Article Last Modified on 12/12/2003

-

APPLIES TO


 * Microsoft Visual Basic 2.0 Standard Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 2.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 1.0 Standard Edition

-



This article was previously published under Q79241



SYMPTOMS
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.



CAUSE
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.



WORKAROUND
Use the KeyUp procedure instead of click, and then call KeyUp when a key is pressed.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. Microsoft is researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.



MORE INFORMATION
This behavior is not documented in the Visual Basic documentation or online Help. This 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 causes another such assignment, but with the new item.

If the ListIndex is reset to -1, a null item is assigned by the code because that setting indicates no item is selected.

Steps to Reproduce Problem
 Start Visual Basic or from the File menu, choose New Project if Visual Basic is already running. Form1 is created by default. Add a combo box (Combo1) to Form1. Add a text box (Text1) to Form1. Add a command button (Command1) to Form1.  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, change the assignment to: text1.text=drive1.list(drive1.ListIndex) -or- text1.text=dir1.list(dir1.ListIndex) </li>  Add the following code to the Click event procedure for Command1: Sub Command1_Click combo1.ListIndex = -1 End Sub </li>  Add the following code to the Form_Load event procedure of Form1: Sub Form_Load For n = 1 To 10 combo1.AddItem Format$(n, &quot;0&quot;) Next End Sub </li> Run the program. Notice that when you click the Command1 button, 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.</li></ol>

<div class="references_section">