Technology Experience
.NET World

Evento Validating. Ok per Windows Forms. Ma per Windows Mobile?

Introduzione per chi non sa di cosa si sta parlando
Facciamola breve. L’evento Validating è il metodo più vecchio per validare il contenuto di un controllo in un’applicazione Windows Forms. L’evento Validating si scatena un attimo prima che un determinato controllo perda il focus: nell’event handler implementate il controllo che volete, e se le cose non vanno come dovrebbero, impostate a true il valore della proprietà Cancel del parametro di tipo CancelEventArgs. Quindi, supponiamo:

1 private void textBox1_Validating(object sender, CancelEventArgs e) 2 { 3 if(string.IsNullOrEmpty(this.textBox1.Text)) 4 e.Cancel = true; 5 }

Il codice qui sopra valida il contenuto di una TextBox su una Windows Forms. Se la TextBox è vuota, non potete andarvene: dovete per forza digitare qualcosa.

Il discorso fatto sinora è valido fintantochè la proprietà CausesValidation della TextBox (più in generale…del controllo) è impostata a true. Se questa proprietà è impostata a false, l’evento Validating non viene più scatenato, e quindi i vostri controlli di validazione non vengono più eseguiti.

Per la serie…non si finisce mai di imparare

Ma non è finita qua. Oltre a CausesValidation, è possibile lavorare con la proprietà AutoValidate del form. Tecnicamente parlando, questa proprietà esiste per tutti i controlli che ereditano da ControlContainer (Panel, GroupBox, TabControl, etc.). Il valore di default è EnablePreventFocusChange: evita che il controllo perda il focus se la validazione non avviene con successo. Qui ci sono maggiori informazioni su questo argomento.

E’ possibile impostare AutoValidate a Disabled. Questo impedisce lo scatenarsi dell’evento Validating, anche se avete impostato CausesValidation a true per un determinato controllo. A cosa potrebbe servire? Gli scenari che mi sono venuti in mente sono fondamentalmente due:

  • Non posso validare un controllo alla volta. Mi spiego meglio. Non sempre posso validare – per esempio – la TextBox su cui mi trovo senza tenere in considerazione altri controlli sulla Windows Form: controlli su cui magari devo ancora passare. Piccolo esempio: per validare una CodiceFiscaleTextBox sulla lunghezza (11 per partita iva o 16 per codice fiscale), devo anche controllare quale degli OptionButton l’utente ha selezionato, per indicare se è un privato o un utente aziendale.
  • Voglio validare esplicitamente quando lo dico io.

Mettendo AutoValidate a Disabled, è sempre e comunque possibile validare il contenuto della Windows Form chiamando esplicitamente il metodo ValidateChildren(), che restituisce un booleano. Questo metodo itera su tutti i controlli della Windows Form e scatena l’evento Validating solo su quelli che hanno CausesValidation a true. La chiamata al metodo restituisce true se tutte le validazioni sono avvenute con successo; restituisce false se almeno una delle validazioni è fallita.

E su Mobile?

Il Compact Framework prevede l’evento Validating sui controlli. Ma non c’è modo di utilizzare AutoValidate sulla Form, e neppure di usare CausesValidation. A quest’ultima cosa è naturalmente possibile sopperire in modo abbastanza semplice, creando una classe che erediti da TextBox e che aggiunga questa proprietà booleana che esegua la validazione solo quando vale true.

Technorati Tags:   

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.