Oppure

Loading
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 19:48
RUDYX
Guarda davidebrescia questa parte di codice ti permette di risolvere il problema , poi mi dovresti dire se sai come trasferire la 'VARIAZIONE' sulla combo, o se ti è sufficiente così.

Questa è la parte di codice :
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 32 Then
  cmbdescriz.text =trim(mid(cmbdescriz.text,1,len(cmbdescriz.text)-1))
End If
End Sub


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 11:51
RUDYX
Postato originariamente da 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..


Ciao DavideBrescia e scusami , ma ultimamente non ho potuto frequentare spesso il Forum, comunque..... beh! hai ragione che probabilmente la causa del NON funzionamento potrebbe essere il tuo programma di AUTOCOMPLETAMENTO, (magari se lo dicevi subito sarebbe stato meglio) , però per ovviare questo potresti mettere la stringa che ti ho consigliato come ultima istruzione alla tua SubRoutine :
cmbDESCR.Text = Trim(Mid(cmbDESCR.Text, 1, Len(cmbDESCR.Text) - 1)) 


...........oppure lo stesso comando invece di metterlo nell'evento KeyPress, provalo a mettere nell'evento Key_up..................
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