Microsoft KB Archive/131300

= PRB: Clicking a Disabled Item in a List Box Selects It =

Article ID: 131300

Article Last Modified on 2/15/2000

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition

-



This article was previously published under Q131300



SYMPTOMS
One or several items in a list box are disabled. If a disabled element is clicked and then enabled, it becomes the selected item in the list.



CAUSE
The value property of the combo box determines which item is displayed. This property is modified when you scroll through a list and the LISTINDEX property varies. Clicking any item in a list, even if it is disabled, changes the LISTINDEX property. If the element is then enabled, the LISTINDEX property is still set to this item, and the list box value is set to the value of the element.



WORKAROUND
An alternative is to compare the elements referred by the LISTINDEX and the VALUE properties. If the VALUE property of the combo box is different from the value of the element referred by LISTINDEX, reset the listindex property to the value property. You can then enable the list element.



STATUS
This behavior is by design.



MORE INFORMATION
The following example program illustrates a workaround to the behavior described. It displays a form with a combo box and a command button. The command button enables all of the items in the list. When the button is clicked, the program checks if the value of the combo box corresponds to the listindex. If it does not, the listindex is reset.

To run this sample program, copy and paste the code into a program file (.PRG file), and run it. When the list is displayed, click the third element, which is disabled. Then click the command button. The element displayed in the text part of the combo box does not change.

Example Workaround Code
oForm1=CREATE('myform') oForm1.SHOW

DEFINE CLASS myform AS FORM Dimension astep(4,1) WindowType=1 ADD OBJECT combo1 AS COMBOBOX WITH HEIGHT = 37,LEFT = 48,; STYLE = 2,TOP = 24 ADD OBJECT cmdenable AS COMMANDBUTTON WITH TOP = 72,LEFT = 48,; HEIGHT = 37,WIDTH = 157,CAPTION = "Enable Steps 2-4" PROCEDURE cmdenable.CLICK DO CASE * The case statement takes into account the fact that the * value can be a character. It then goes through the list * and finds the index that corresponds to the current value * and resets the listindex. CASE TYPE('THISFORM.COMBO1.VALUE')="C" IF THISFORM.combo1.VALUE <> ; THISFORM.combo1.LIST(THISFORM.combo1.LISTINDEX) i = 1 lexit=.F.              DO WHILE i <= THISFORM.combo1.LISTCOUNT AND lexit=.F.                  IF THISFORM.combo1.LIST(i)=THISFORM.combo1.VALUE nNewIndex=i lexit=.T.                 ENDIF i=i+1 ENDDO THISFORM.combo1.LISTINDEX=nNewIndex ENDIF
 * Class: myform BaseClass: FORM
 * Class: myform BaseClass: FORM
 * Class: myform BaseClass: FORM

CASE TYPE('Thisform.combo1.value')="N" IF THISFORM.combo1.VALUE<> THISFORM.combo1.LISTINDEX THISFORM.combo1.LISTINDEX=THISFORM.combo1.VALUE ENDIF ENDCASE

FOR m.i = 2 TO 4 THisform.aStep[m.i, 1] = STRTRAN(Thisform.aStep[m.i, 1], '\') ENDFOR

THISFORM.combo1.REQUERY

ENDPROC

PROCEDURE INIT This.aStep[1,1] = 'Step 1' This.aStep[2,1] = '\Step 2' This.aStep[3,1] = '\Step 3' This.aStep[4,1] = '\Step 4' THIS.combo1.ROWSOURCETYPE = 5 THIS.combo1.ROWSOURCE = 'Thisform.aStep' THIS.combo1.VALUE = 1 ENDPROC ENDDEFINE

Additional query words: VFoxWin

Keywords: kbcode KB131300

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.