davidebrescia (Normal User)
Newbie
Messaggi: 14
Iscritto: 17/12/2010
|
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.
|
|
RUDYX (Normal User)
Pro
Messaggi: 109
Iscritto: 08/04/2010
|
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 :
Codice sorgente - presumibilmente VB.NET |
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
|
|
|
davidebrescia (Normal User)
Newbie
Messaggi: 14
Iscritto: 17/12/2010
|
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..
|
|
Sal47 (Normal User)
Pro
Messaggi: 96
Iscritto: 05/02/2009
|
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
|
|
davidebrescia (Normal User)
Newbie
Messaggi: 14
Iscritto: 17/12/2010
|
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.
|
|
RUDYX (Normal User)
Pro
Messaggi: 109
Iscritto: 08/04/2010
|
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 :
Codice sorgente - presumibilmente Plain Text |
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.................. |
|
davidebrescia (Normal User)
Newbie
Messaggi: 14
Iscritto: 17/12/2010
|
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...
|
|
RUDYX (Normal User)
Pro
Messaggi: 109
Iscritto: 08/04/2010
|
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 ........................
|
|
davidebrescia (Normal User)
Newbie
Messaggi: 14
Iscritto: 17/12/2010
|
Già provato a mettere la riga anche nella mia routine..e niente da fare o ottengo un errore oppure se per esempio digito la parola CAFFE e premo il backspace mi torna indietro di 1 carattere e si limita ad evidenziarlo ma senza cancellarlo. Io credo proprio che bisognerebbe rivedere la routine di autocompletamento che io ho copiato e che di per se funziona, solo che ce questo inconveniente..con l'istruzione cmbdescr.text="" alla pressione del tasto backspace ottego la cancellazione totale del contenuto di cmbdescr.text, cancellando l'istruzione cmbdescr.text="" e mettendo la tua istruzione ottengo l'evidenziazione dell'ultimo carattere contenuto in cmbdescr.text ma non vuole saperne di eliminarlo, ripremendo backspace non si sposta al penultimo carattere, anzi rimane paralizzato sull'ultimo e da qui non se ne esce.. per me la soluzione è : 1 - eliminare il concetto di autocompletamento oppure 2 - riscrivere la routine di autcompletamento oppure 3 - sperare in qualche lluminazione dall'alto dei cieli...che ritengo poco probabile... eheheh .. ti ringrazio ancora rudix x l'aiuto e lo sforzo, se comunque non riesco ad ottenere ciò che voglio pazienza, per questo mio applicativo personale non vale la pena diventare matti...ciaoo
|
|