17/12/10 13:33
davidebrescia
Buongiorno a tutti e complimenti per questo utile e bellissimo sito a chi lo gestisce. Il mio problema è questo : utilizzo visual basic 6 enterprise, ho una combobox che attraverso un algoritmo si completa automaticamente per quanto riguarda il campo descrizione.Premendo il tasto BACKSPACE tutto il testo contenuto nella combo (cmbdescriz) viene cancellato, io invece vorrei ottenere attraverso la pressione del tasto BACKSPACE la cancellazione di un singolo carattere partendo da destra. Esempio :
Acquistato videoregistratore (questo è il testo in cmbdescriz)
premo BACKSPACE
ottengo la cancellazione totale del contenuto
io invece vorrei che premendo BACKSPACE
possa ottenere la cancellazione di un carattere alla volta...
esempio
premo BACKSPACE
Acquistato videoregistrator
premo BACKSPACE
Acquistato videoregistrato
etc etc
Grazie in anticipo a chi mi fornirà un aiuto.
aaa
22/12/10 23:55
davidebrescia
RUDIX intanto ti ringrazio per il tuo aiuto ma ahimè non funziona.
Ti spiego come l'ho provato.
Ho inserito il tuo codice in questo modo:
Private Sub cmbDESCR_KeyPress(KeyAscii As Integer)
If KeyAscii = 32 Then
cmbDESCR.Text = Trim(Mid(cmbDESCR.Text, 1, Len(cmbDESCR.Text) - 1))
End If
Esempio:
Ho scritto la parola CAFFE (che si è autocompletata)
premuto BACKSPACE
ho ottenuto che il cursore si è posizionato sulla E evidenziandola ma senza cancellarla..
aaa
23/12/10 7:14
Sal47
Se può essere utile:
- ho inserito il combobox (Combo1) sul form con le proprietà:
. Style 0 o 1 (non 2)
. in List ho scritto CAFFE.
- ho modificato il codice di Rudix sostituendo
If KeyAscii = 32 Then
con
If KeyAscii = 8 Then
e funziona.
Infatti, se ad es. nel combo1 è evidenziata la parola CAFFE, ad ogni pressione del tasto Backspace
la parola diventa: CAFF, poi CAF, poi CA, ecc.
Saluti
aaa
23/12/10 8:48
davidebrescia
Grazie Sal per il tuo aiuto ma non funziona.
Io credo che il problema sia localizzato nell'algoritmo di gestione dell'autocompletamento. A tal proposito ne inserisco il codice.
Private Sub cmbDESCR_Change()
Static Changing As Boolean
Static Found As Boolean
Static PartialText As String
If Changing Then Exit Sub Else Changing = True ' questo evita le chiamate nidificate della routine
If cmbDESCR.Text = "" Then GoTo Esci ' se non vi è testo esce dalla routine
PartialText = cmbDESCR.Text 'memorizza la parte di testo digitata
If Canceling Then GoTo Esci ' se il tasto Cancel è premuto esce dalla routine
If PartialText = "" Then GoTo Esci
SendMessage(cmbDESCR.hwnd, CB_FINDSTRING, -1, ByVal PartialText) ' trova l'indice per l'elemento più simile al quello digitato
If L > -1 Then ' se l'elemento viene trovato
' il testo parziale viene completato con quello trovato dall'API
cmbDESCR.Text = PartialText & Mid(cmbDESCR.List(L), Len(PartialText) + 1)
If Not Deleting Then
cmbDESCR.SelStart = Len(PartialText)
Else
cmbDESCR.SelStart = Len(PartialText) - IIf(Found, 1, 0)
End If
cmbDESCR.SelLength = Len(cmbDESCR.Text)
PartialText = Mid(cmbDESCR.Text, 1, cmbDESCR.SelStart)
If PartialText = "" Then cmbDESCR.Text = ""
Deleting = False
Found = True
Else
Found = False
End If
Esci:
Changing = False
Deleting = False
Canceling = False
End Sub
Private Sub cmbDESCR_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDelete Then Canceling = True
If KeyCode = vbKeyBack And cmbDESCR <> "" Then
Deleting = True: KeyCode = 0
End If
End Sub
Private Sub cmbDESCR_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then
cmbDESCR.Text = Trim(Mid(cmbDESCR.Text, 1, Len(cmbDESCR.Text) - 1))
End If
END SUB
Questo codice che mi serve per l'autocompletamento del combobox l'ho a mia volta copiato e incollato nel mio programma e raggiunge lo scopo di autocompletare la descrizione, il problema appunto è che non è possibile cancellare un carattere alla volta. Volendo si può anche riscrivere il codce di auocompletamento perchè secondo me è quello che impedisce alle vostre soluzioni di funzionare correttamente..solo che io non so come posso fare ad ottenere l'autocompletamento e quindi la cancellazione di un carattere.
aaa
13/01/11 12:32
davidebrescia
Ciao Rudix e grazie per l'aiuto ..ho provato a seguire il tuo consiglio a mettere l'istruzione sotto l'evento keypress e/o keydown ma mi da un errore..chiamata di routine illegale..(o qualcosa del genere)...comunque non funziona...
aaa
13/01/11 12:49
RUDYX
scusa ma hai detto che nella routine Keypress , comunque funzionava (non come avresti voluto .......ma funzionava),
altrimenti potresti fare come ti ho detto prima , la stringa la dovresti inserire all'ultima riga della routine che tu hai già (quella riferita all'AUTOCOMPLETAMENTO , per intenderci)
ciao e fammi sapere ........................
aaa