ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Comment créer un combobox 'auto-fill'   



L'auteur

Mike Gagnon
Canada Canada
Membre Simple
# 0000000025
enregistré le 14/10/2004

Gagnon Mike
Pointe Cla H9R 3K8
de la société Carver Technologies Inc.
Fiche personnelle


Note des membres
pas de note

Contributions > 20 - Trucs et Astuces

Comment créer un combobox 'auto-fill'
# 0000000036
ajouté le 02/11/2004 14:53:47 et modifié le 02/08/2005
consulté 9672 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description

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
IF this.style = 2
    this.style = 0
ENDI
IF (lnLastKey>=32 and lnLastKey<=126)
    IF this.selstart>=1
        lcDisplayValue=substr(this.displayvalue,1,this.selstart-1)+(chr(lnLastKey))
    ELSE
        lcDisplayValue=(chr(lnLastKey))+allt(this.displayvalue)
    ENDI
    IF empty(lcDisplayValue)
        lcDisplayValue=allt(chr(lnLastKey))
    ENDI
    FOR i = 1 to this.listcount
            If Upper(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
    Store Juststem(This.RowSourceTo cTableName &&Won't work for VFP5.0
    Store Justext(This.RowSourceTo 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
            Insert Into &cTableName (&cFieldName) Values (This.DisplayValue)
            If CursorGetProp("Buffering") > 1  && Check to see if we should use tableupdate
                Tableupdate(1,.T.,cTableName)
            ENDIF
        this.Requery() && To reset the display value
        Else
            Store '' To This.DisplayValue
        Endif
    Endif
ENDIF



Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3