Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Domanda su Exit Sub

Ho il seg. codice
Option Explicit
Dim savetext As String
Dim saveselstart As Long
Private Sub Text1_Change()
Static nestedcall As Boolean 'Crea una variabile di tipo booleano da usare
come flag
If nestedcall Then Exit Sub 'Controlla il valore della variabile booleana
If IsNumeric(Text1.text) Then 'Controlla se il contenuto della casella di
testo è un valore
                              'numerico
    'Salva il contenuto della casella di controllo se il contenuto è
numerico
    savetext = Text1.text
    saveselstart = Text1.SelStart 'Salva nella variabile saveselstart il
valore della posizione
                                  'del cursore dell'ultimo inserimento
valido. Questa variabile
                                  'verrà usata come flag per riportare il
caret nella posizione
                                  'immediatamente precedente nel caso di un
inserimento non valido
Else
    'Prepararsi a trattare le chiamate ricorsive
    nestedcall = True 'Il flag per la ricorsione viene impostao a True
    Text1.text = savetext 'Questa istruzione richiama l'evento Change()
    nestedcall = False 'Se precedentemente si era inserito un carattere non
valido ed il flag era
                       'stato impostato a True, mettilo a False.
    Text1.SelStart = saveselstart 'Poichè è stato inserito un carattere non
valido sposta il caret
                                  'nell'ultimo punto di inserimento valido
End If
End Sub
Private Sub Text1_GotFocus()
'All'avvio si verifica questo evento e le due variabili vengono salvate con
il testo
'presente nella casella di testo.
savetext = Text1.text
saveselstart = Text1.SelStart
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
saveselstart = Text1.SelStart
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
saveselstart = Text1.SelStart
End Sub
Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
saveselstart = Text1.SelStart
End Sub
Eseguendo il debug passo-passo sono giunto al punto in cui inserisco un
carattere non numerico ed acco la sequenza delle istruzioni svolte:
INSERIMENTO CARATTERE NON VALIDO ( i )
Private Sub Text1_Change()
If nestedcall Then Exit Sub
If IsNumeric(Text1.Text) Then
Else
nestedcall=True
Text1.Text=savetext
Private Sub Text1_Change() 'RIENTRA PER LA SECONDA VOLTA
If nestedcall Then Exit Sub    'QUI DOVREBBE USCIRE...
nestedcall=False
Text1.SelStart=saveselstart
Endif
End Sub
Non capisco perchè quando rientra in Text1_Change(), essendo nestedcall=True
non esce dalla Sub ma esegue le istruzioni seguenti, come potete vedere.
Se potreste aiutarmi, ve ne sarei grato.
Grazie.

 nestedcall=False
    Giusto, ci eravamo lasciati qui, no?
Ciao

     Giusto, ci eravamo lasciati qui, no?
Ciao, allora ho eseguito il debug passo-passo con lo stack di chiamate
sempre attivo e praticamente al momento della ricorsione nella finestra
Stack ho
Progetto1.Form1.Text1_Change
[<codice non Basic>]
Progetti1.Form1.Text1_Change
nel momento in cui vado a nestedcall=False trovo
Progetto1.Form1.Text1_Change
Io pensavo che con l'istruzione Exit Sub si arrivasse subito a Ebd Sub, ma
non č cosě....

 non č cosě....
Ma come non č cosě?
Nemmeno dopo averlo visto con i tuoi occhi?
Va sě alla end sub, ma della chiamata corrente.
Ciao