Strano comportamento in combobox

  1. last week
    Edited last week

    Ho una combobox con dei dati caricati nel TEXT e nel ROWTAG,
    e quando intercetto l'evento TEXTCHANGED con il codice che vedete sotto,
    mi si presenta un errore di runtime che non riesco a identificare
    alla riga:

    dato = Split(tf2.RowTag(tf2.listindex),";")

    Se invece attivo le due righe MSGBOX che mi fanno prima vedere il
    contenuto, tutto funziona come dovrebbe e la matrice DATO() viene
    caricata assegnando i contenuti alle textfields.
    Quale sarà il motivo dell'errore?

    Dim dato(-1) As String
    if len(me.text)<4 then exit  'considera voci solo oltre 3 caratteri
      //msgbox tf2.Text
      //msgbox tf2.RowTag(tf2.listindex)
      dato = Split(tf2.RowTag(tf2.listindex),";")  
      tf3.Text=dato(0) 'prezzo di riferimento
      tf4.Text=dato(1) 'IVA"
      tf9.Text=dato(2) 'voce
    End If
  2. Edited last week

    Aggiornamento!
    Mi sono scordato di dire che la combo è Autocomplete=TRUE, pertanto al primo carattere digitato si posiziona sulla prima ricorrenza. Inoltre se lo stesso codice di cui sopra lo eseguo nell'evento CHANGE, tutto funziona regolarmente.
    Come dicevo, la cosa è strana o perlomeno non trasparente.

  3. Antonio R

    Dec 5 Pre-Release Testers, Xojo Pro Europe (Italy)

    è un po' più complicato....
    Su win
    Changed viene richiamato solo se selezioni la voce dal menu
    TextChanged viene richiamato man mano che scrivi, ma ListIndex è il valore precedente (quindi potenzialmente anche -1)
    Se è -1 non è stata selezionata una voce dal menu precedentemente.
    se selezioni una voce da quelle che corrispondono (il menu che appare man mano che scrivi) ListIndex ha il valore della voce
    Per cui dovresti verificare prima che il testo corrisponda al valore previsto per il listIndex (sempre controllando che non sia -1)
    Se selezioni una voce dal menu (come se fosse un popup) allora hai textchanged con il listindex giusto e changed (in questa sequenza)
    Quando esci dal controllo (LostFocus) TextChanged viene richiamato ancora se c'è una corrispondenza, no se non c'è
    Su Mac
    Textchanged viene chiamato man mano che scrivi, e listIndex non corrisponde a quello che scrivi (generalmente)
    Changed viene chiamato quando completi l'editing (ma il list index potrebbe non corrispondere)
    Se selezioni dal menu tutto è ok (listindex, changed etc.)

    Per farla breve se dipendi dal valore di rowtag non è affidabilissimo come controllo
    Ma c'è un motivo:
    è il controllo sbagliato.

    Se dipendi dal rowtag probabilmente hai una lista di valori predefinita e chiusa per cui il popup è il controllo giusto (e su win puoi usare la tastiera per identificare la voce)

    Se la lista non è chiusa (ovvero puoi avere altri valori oltre quelli previsti) utilizza il lostfocus per capire se la voce appartiene alla lista e quindi il suo indice per ottenerne il valore o il textchanged verificando se l'index corrisponde al testo e altrimenti cerca il valore per ottenere l'indice giusto (ma non cambiare il listindex altrimenti non ne esci)

  4. Grazie infinite Antonio! In effetti mi sono scontrato con qualcosa di nebuloso, ma la tua spiegazione mi permette ora di risolvere il problema. Obbligato!

or Sign Up to reply!