Voici comment créer l'effet 'auto-fill' (comme la barre d'addresse de l'internet explorer) et permettre d'ajouter les valeur non-trouvées dans la table source. Ceci fonctionne seulement si la source du combobox est une table.
Note: Ne pas spécifier le controle source, le laisser vide.
Créer un classe combo et ajouter les propriétés suivantes.
a) acstyle (valeur par défaut 2)
b) lastdisplayvalue (valeur par défaut '')
c) lastsellength (valeur par défaut 0 )
d) lastselstart (valeur par défaut 0)
Code source :
&&Dans l'InteractiveChange du combo
LOCAL lnStyle, lnLastKey, lcDisplayValue
lnLastKey=lastkey()
lnStyle = this.style IFthis.style = 2 this.style = 0
ENDI IF (lnLastKey>=32 and lnLastKey<=126) IFthis.selstart>=1
lcDisplayValue=substr(this.displayvalue,1,this.selstart-1)+(chr(lnLastKey)) ELSE
lcDisplayValue=(chr(lnLastKey))+allt(this.displayvalue)
ENDI IFempty(lcDisplayValue)
lcDisplayValue=allt(chr(lnLastKey))
ENDI FOR i = 1 tothis.listcount IfUpper(lcDisplayValue) == Upper(Substr(This.List(i),1,Len(lcDisplayValue))) This.DisplayValue=This.List(i) This.SelStart=Len(lcDisplayValue)
nlLength=Len(Allt(This.DisplayValue))-Len(lcDisplayValue) This.SelLength=Iif(nlLength <0,0,nlLength) this.lastdisplayvalue = this.displayvalue this.lastselstart = this.selstart this.lastsellength = this.sellength RETURN
ENDI ENDFOR ENDIf
&&Dans le requery du combo
this.Value = this.DisplayValue&& Just to reset the display value
&&Dans le Valid du combobox
If !Empty(This.DisplayValue) Local cTableName,cFieldName,nAnswer,cValue StoreJuststem(This.RowSource) To cTableName &&Won't work for VFP5.0 StoreJustext(This.RowSource) To cFieldName && This is normally used for 3 character extension, but it works for any lenght. Won't work for VFP5.0 Select (cTableName)
Locate For &cFieldName = This.DisplayValue If !Found()
nAnswer = Messagebox("Valeur non trouvé dans la table,"+Chr(13)+"Voulez-vous sauvegarder cette valuer dans la table?",36,"") If nAnswer = 6 InsertInto &cTableName (&cFieldName) Values (This.DisplayValue) IfCursorGetProp("Buffering") > 1 && Check to see if we should use tableupdate Tableupdate(1,.T.,cTableName) ENDIF this.Requery() && To reset the display value Else Store''ToThis.DisplayValue Endif Endif ENDIF