*** handle the key...IOW, find the closest match in the list IF ( nKeyCode > 31 AND nKeyCode < 128 ) OR ( nKeyCode = 7 ) *** We need this to update the combo's display value IF This.HandleKey( nKeyCode ) NODEFAULT ENDIF ENDIFAnd this 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 ENDWITHThe code in the combo's valid to decide whether or not you have added a new entry:
IF This.ListIndex = 0 AND !EMPTY( This.DisplayValue ) *** New entry...add it to the underlying RowSource *** and save the value of the combo so it can be restored This.Requery() This.Value = < what it was before > ENDIFMarcia