Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - COMBOBOX VB6 CANCELLAZIONE CARATTERE
Forum - Visual Basic 6 - COMBOBOX VB6 CANCELLAZIONE CARATTERE

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
davidebrescia (Normal User)
Newbie


Messaggi: 14
Iscritto: 17/12/2010

Segnala al moderatore
Postato alle 14:33
Venerdì, 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.

PM
Avatar
RUDYX (Normal User)
Pro


Messaggi: 109
Iscritto: 08/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:48
Mercoledì, 22/12/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

  1. Private Sub Combo1_KeyPress(KeyAscii As Integer)
  2. If KeyAscii = 32 Then
  3.   cmbdescriz.text =trim(mid(cmbdescriz.text,1,len(cmbdescriz.text)-1))
  4. End If
  5. End Sub




PM
Avatar
davidebrescia (Normal User)
Newbie


Messaggi: 14
Iscritto: 17/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 0:55
Giovedì, 23/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..


davidebrescia ha allegato un file: Appunti01.jpg (314765 bytes)
Clicca qui per guardare l'immagine
PM
Avatar
Sal47 (Normal User)
Pro


Messaggi: 96
Iscritto: 05/02/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 8:14
Giovedì, 23/12/2010
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

PM
Avatar
davidebrescia (Normal User)
Newbie


Messaggi: 14
Iscritto: 17/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 9:48
Giovedì, 23/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.

PM
Avatar
RUDYX (Normal User)
Pro


Messaggi: 109
Iscritto: 08/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:51
Giovedì, 13/01/2011
Testo quotato

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

  1. 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..................  

PM
Avatar
davidebrescia (Normal User)
Newbie


Messaggi: 14
Iscritto: 17/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 13:32
Giovedì, 13/01/2011
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...

PM
Avatar
RUDYX (Normal User)
Pro


Messaggi: 109
Iscritto: 08/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 13:49
Giovedì, 13/01/2011
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 ........................

PM
Avatar
davidebrescia (Normal User)
Newbie


Messaggi: 14
Iscritto: 17/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 14:11
Giovedì, 13/01/2011
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

PM
Pagine: [ 1 2 3 ] Precedente | Prossimo