Proc HandleKey Lparameters tnKeyCode Local lcSofar, lnSelStart, lnSelLength, lnSelect, lcFld, lbNoDefault *** Handle backspace key If tnKeyCode = 127 If This.SelStart = 0 Return .F. Endif This.SelStart = This.SelStart - 1 lnSelStart = This.SelStart lcSofar = Upper( Left( This.DisplayValue, lnSelStart ) ) Else *** Get the value typed in so far lnSelStart = This.SelStart+1 lcSofar = Upper( Left( This.DisplayValue, This.SelStart ) + Chr( tnKeyCode ) ) Endif *** See if we can find a match in the Alias used as the RowSource lcFld = This.calias + '.' + This.ckeyfield If Not Empty( This.ctag ) If Seek( lcSofar, This.calias, This.ctag ) This.DisplayValue = Eval( lcFld ) Else **************************************************************** Return Not This.lallowaddnew *!* If Not This.lallowaddnew *!* This.ListIndex = 0 *!* lnSelStart = 0 *!* Else *!* Return .F. *!* Endif Endif Else lnSelect = Select() Select ( This.calias ) Locate For Upper( &lcFld ) = lcSofar If Found() This.DisplayValue = Eval( lcFld ) Else **************************************************************** Return Not This.lallowaddnew *!* If Not This.lallowaddnew *!* This.ListIndex = 0 *!* lnSelStart = 0 *!* Else *!* Return .F. *!* Endif Endif Select ( lnSelect ) Endif *** Highlight the portion of the value after the insertion point This.SelStart = lnSelStart lnSelLength = Len( Alltrim( This.DisplayValue ) ) - lnSelStart If lnSelLength > 0 This.SelLength = lnSelLength Endif EndProcThanks,