Newsgroup: it.comp.lang.visual-basic
Titolo: Cosa molto strana con evento text_change

Ciao a tutti, dopo mesi  senza scrivere piu' una riga di codice sono
incappato in una cosa piuttosto strana, almeno per me.
Copiate questo codice in un form con una textBox una Label e un Button.
Inserite almeno tre lettere MINUSCOLE
La routine viene attivata dall'evento Text1_Change e quindi quando Ucase
modifica le lettere l'evento change viene registrato di nuovo e la routine
eseguita 2 volte.
Non voglio sapere come evitarlo, (basta usare Text1_KeyUp anziche'
Text1_Change), ma PERCHE' la variabile  n  NON viene azzerata quando si
riesegue la routine ??
Per farlo bisogna spostare n=0 dopo l'istruzione Ucase eppure provate a
mettere un altro MsgBox prima di Ucase e ditemi perche' viene eseguito 2
volte prima di tutto il resto!
Se qualcuno mi sapra' spiegare tutto cio' gliene saro' grato.
Dim n As Integer
Private Sub Command1_Click()
n = 0
Text1 = UCase(Text1)
If Text1 = "" Then Label1 = "Non hai scritto niente!" Else Label1 = "Hai
scritto: " & Text1
n = n + 1
MsgBox "Sto eseguendo la routine per la " & n & "° volta", vbInformation
Text1 = ""
End Sub
Private Sub Form_Activate()
Me.Left = 0
End Sub
Private Sub Text1_Change()
If Len(Text1) > 2 Then Command1_Click
End Sub
--
Satured   [ contento di programmare solo per hobby :-)  ]

 riesegue la routine ??
Non viene mai azzerato, c'è quel n=n+1 che viene eseguito in ogni caso.
Anche Text1="" attiva la routine, l'hai notato?


Sinceramente no, mi era sfuggito, comunque non hai capito la mia domanda: ok
c'e' l' n=n=+1 ma e' dopo n=0, quindi n al massimo dovrebbe diventare=1
invece se provi ad inserire ad esempio "abc", il messageBox apparira' una
volta indicando n=1 e la seconda indicando n=2.   Questo io, non lo capisco
proprio: se la routine ricomincia daccapo come fa n a diventare=2 ?
Mettendo un altro MsgBox "ciao pippo" al posto di n=0 ho notato che ciao
pippo viene eseguito 2 volte di fila e poi passa ad eseguire due volte di
fila il resto della routine: prova.    Questo spiega perche' n diventa=2 ma
che senso ha??
Perche' le istruzioni della routine non vengono eseguite nell'ordine in cui
sono?
ciao e grazie per l'attenzione

 Sinceramente no, mi era sfuggito, comunque non hai capito la mia domanda:
ok
A dir il vero non ho nemmeno capito anche il tuo codice, veramente
arzigogolato e, secondo me, poco funzionale. Posso capire che sia una prova,
però...
Credo che tutto dipenda dai MsgBox. Tali "aggeggi", infatti, bloccano tutto
e interrompono quindi anche l'eventuale coda di eventi. Prova a mettere
sulla form un Listbox e fai vari List1.Additem "messaggio" in corrispondenza
degli attuali MsgBox, che commentarai togliendone l'esecuzione.

 perň...
Si, si e' vero. Infatti ho cercato di estrarre la routine che mi dava il
problema da un progetto.
L'ho trovato per caso usando l'evento change  e l'ho eliminato usando
l'evento KeyUp, solo che ero curioso di capire il ping-pong che si crea
dentro la routine.
Domani comunque provero' il tuo suggerimento.
ciao e grazie

 End Sub
sembrerebbe finito...invece no!al punto 1 la sub è stata eseguita quindi
ricomincia da dove era partita e cioè da text1=ucase(text1)
con n, in questo caso= ad 1, quindi, n=n+1 = ad 2 !!!!!
Così riesegue i punti 2,3,4 e finisce il programma outputtando il msg con n
= 2!!!
Ca pisco di essermi spiegato in modo un po' astruso, cmq per verificare il
ragionamento prova ad eseguire il programma al debug(F8).
La soluzione al tuo problema cmq è inserire la dichiarazione della nel
command1_click e non all'esterno!
GoodBye By Ged
--
"Non so che immagine abbia di me il mondo, ma io mi vedo come un bambino che
gioca sulla riva del mare, e di tanto in tanto si diverte a scoprire un
ciottolo più levigato o una conchiglia più bella del consueto, mentre
davanti mi si stende, inesplorato, l'immenso oceano della verità"!!!!
Isaac Newton