Newsgroup: it.comp.lang.visual-basic
Titolo: [.Net] Problemi convalida TextBox

Ciao.
Ho un problemino nel capire come fuziona la convalida del testo inserito in
una TextBox.
Ho creato un sempice form, con due Textbox e due Button.
Il Button1 ha la proprietà CausesValidation impostata a True, mentre il
Button2 ha la proprietà CausesValidation impostata a False.
Nell'evento Validating di TextBox1 inserisco una semplice regola di
validazione, per esempio questa:
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    If Not TextBox1.Text.StartsWith("A") Then
        MessageBox.Show("Il testo deve iniziare per A")
        e.Cancel = True
    End If
End Sub
A questo punto se scrivo qualcosa in TextBox1 che non inizia per "A" e
clicco su Button1 (quello che CausesValidation=True) mi segnala
correttamente che il testo deve iniziare per A e il focus mi rimane su
TextBox1.
Se invece clicco su Button2 (quello che CausesValidation=False) il focus
passa giustamente al Button perchè la convalida non viene eseguita. Se però
provo a cliccare su TextBox2, mi arriva il MessageBox di convalida di
TextBox1 e mi dice ancora che il testo deve iniziare per A.
Sbaglio io qualcosa o è giusto questo comportamento?
Grazie e ciao.
Skysurfer

 Sbaglio io qualcosa o è giusto questo comportamento?
Giusto ""<>"A"
per essere sicuri metti un punto di interruzione e ti togli ogni dubbio
Ciao
Alessandro
--
Morfeus®
Free Joint
:PII

>""<>"A"
Rileggendo il tuo post mi sono accorto di non averti risposto ,guarda ad
occhio e croce proverei a impostare a false CausesValidation anche su text2
per vederne il comportamento.
Non sono sicuro ma potrebbe darsi che considera ancora text1 come il
controllo che perde il fuoco e che non ha ricevuto convalida,ma
effettivamente non ho mai riscontrato questo comportamento e adesso non
posso provarlo ma ci farò caso.



Se imposto CauseValidation a False anche su TextBox2 il problema non si
pone.
Penso anche io che il problema sia questo, che lui considera ancora Text1
come il controllo che perde il fuoco.
Forse per riprodurre meglio il problema è meglio mettere 3 TextBox, in cui
la prima ha un evento di validazione, la seconda ha CausesValidation a False
e la terza a CausesValidation a True. Se dalla prima passi alla seconda
l'evento non viene lanciato, ma se poi dalla seconda passi alla terza, ecco
che lui lancia l'evento di validazione di TextBox1.
Grazie e ciao.
Skysurfer

 Sbaglio io qualcosa o è giusto questo comportamento?
Direi che è il comportamento "by design" della validazione.
Salutoni
Sergio

 che lui lancia l'evento di validazione di TextBox1.
Ho l'impressione che con tre caselle:
1-  CausesValidation a True
2- CausesValidation a False
3- CausesValidation a True
se nella prima casella la lettera iniziale č diversa da A č vero che puoi
andare nella seconda,
ma ho l'impressione che dalla seconda, se ti muovi, ti riporta nella prima
fino all'inserimento di una A
giuseppeD

>Non sono sicuro ma potrebbe darsi che considera ancora text1 come il
controllo che perde il fuoco e che *non ha ricevuto convalida*
a meno che non gestisci che, quando ti muovi da un controllo ad un altro,
per il controllo in *sospeso* la convalida non deve essere handled (gestita)
Messa in questi termini allora ti ha già risposto CSSoft, è normale che si
comporti in questo modo, visto che in ogni caso tu modifichi text1 e questo
genera l'evento Validation. Se ti muovi da un controllo ad un altro, il
sistema legge prima se il "NextCtrl", prima di diventare Current, deve
convalidare o meno i controlli precedenti che rimangono in *sospeso* in caso
negativo.



Ho capito.
Grazie a tutti per le risposte...
Ciao
Skysurfer