è 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)