IF This.SelStart > 0 IF ( LASTKEY() > 31 AND LASTKEY() < 128 ) OR ( LASTKEY() = 7 ) This.HandleKey() ENDIF ENDIFThis goes in HandleKey():
LOCAL lcSofar, lnSelStart, lnSelLength, lnRow WITH This *** Handle backspace key IF LASTKEY() = 127 .SelStart = .SelStart - 1 ENDIF *** Get the value typed in so far lnSelStart = .SelStart lcSofar = LEFT( .DisplayValue, lnSelStart ) *** Find a match in column #1 of the combo's internal list FOR lnRow = 1 TO .ListCount IF UPPER( .List[ lnRow, 1 ] ) = UPPER( lcSoFar ) .ListIndex = lnRow EXIT ENDIF ENDFOR *** Highlight the portion of the value after the insertion point .SelStart = lnSelStart lnSelLength = LEN( ALLTRIM( .DisplayValue ) ) - lnSelStart IF lnSelLength > 0 .SelLength = lnSelLength ENDIF ENDWITHThen, in the valid of the instance, I have code like this:
IF This.ListIndex = 0 AND !EMPTY( This.DisplayValue) *** The user typed in a new entry *** Take action here to add the new entry *** To the combo's RowSource *** Requery the combo afterwards *** and reset its value to the newly entered item ENDIFMarcia