Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando gli utenti immettono i dati nell'applicazione, è possibile verificare che i dati siano validi prima che vengano usati dall'applicazione. Potrebbe essere necessario che determinati campi di testo non siano di lunghezza zero, che un campo formattato come numero di telefono o che una stringa non contenga caratteri non validi. Windows Form offre diversi modi per convalidare l'input nell'applicazione.
Controllo MaskedTextBox
Se è necessario richiedere agli utenti di immettere i dati in un formato ben definito, ad esempio un numero di telefono o un numero di parte, è possibile eseguire questa operazione in modo rapido e con codice minimo usando il controllo MaskedTextBox. Una maschera è una stringa costituita da caratteri di un linguaggio di mascheratura che specifica quali caratteri possono essere immessi in ogni posizione nella casella di testo. Il controllo visualizza un set di richieste all'utente. Se l'utente inserisce un dato errato, ad esempio, digita una lettera quando è necessaria una cifra, il sistema rifiuta automaticamente l'input.
Il linguaggio di maschera utilizzato da MaskedTextBox è flessibile. Consente di specificare caratteri obbligatori, caratteri facoltativi, caratteri letterali, ad esempio trattini e parentesi, caratteri di valuta e separatori di data. Il controllo funziona anche correttamente se associato a un'origine dati. L'evento Format in un data binding può essere utilizzato per riformattare i dati in ingresso in modo che siano conformi alla maschera e l'evento Parse può essere usato per riformattare i dati in uscita in modo da rispettare le specifiche del campo dati.
Convalida guidata dagli eventi
Se si desidera un controllo a livello di codice completo sulla convalida o sono necessari controlli di convalida complessi, è consigliabile usare gli eventi di convalida integrati nella maggior parte dei controlli Windows Form. Ogni controllo che accetta input utente in formato libero ha un Validating evento generato ogni volta che il controllo richiede la convalida dei dati. Nel codice del Validating gestore eventi è possibile convalidare l'input dell'utente in diversi modi. Ad esempio, se si dispone di una casella di testo che deve contenere un codice postale, è possibile eseguire la convalida nei modi seguenti:
Se il codice postale deve appartenere a un gruppo specifico di codici postali, è possibile eseguire un confronto di stringhe sull'input per convalidare i dati immessi dall'utente. Ad esempio, se il codice postale deve trovarsi nel set
{10001, 10002, 10003}, è possibile usare un confronto di stringhe per convalidare i dati.Se il codice postale deve trovarsi in un modulo specifico, è possibile utilizzare espressioni regolari per convalidare i dati immessi dall'utente. Ad esempio, per convalidare il modulo
#####o#####-####, è possibile usare l'espressione regolare^(\d{5})(-\d{4})?$. Per convalidare il moduloA#A #A#, è possibile usare l'espressione regolare[A-Z]\d[A-Z] \d[A-Z]\d. Per altre informazioni sulle espressioni regolari, vedere Espressioni Regolari .NET e Esempi di Espressioni Regolari.Se il codice postale deve essere un codice postale valido per gli Stati Uniti, è possibile chiamare un servizio Web con codice postale per convalidare i dati immessi dall'utente.
All'evento Validating viene fornito un oggetto di tipo CancelEventArgs. Se si determina che i dati del controllo non sono validi, annullare l'evento Validating impostando la proprietà Cancel dell'oggetto su true. Se non si imposta la Cancel proprietà , Windows Form presuppone che la convalida abbia avuto esito positivo per tale controllo e generi l'evento Validated .
Per un esempio di codice che convalida un indirizzo di posta elettronica in un TextBox, vedere il riferimento all'evento Validating.
Controlli di convalida collegati ai dati basati su eventi
La convalida è utile quando i controlli sono associati a un'origine dati, ad esempio una tabella di database. Usando la convalida, è possibile assicurarsi che i dati del controllo soddisfino il formato richiesto dall'origine dati e che non contengano caratteri speciali, ad esempio virgolette e barre rovesciata che potrebbero non essere sicure.
Quando si utilizza l'associazione dei dati, i dati nel controllo vengono sincronizzati con l'origine dei dati durante l'esecuzione dell'evento Validating. Se si annulla l'evento Validating, i dati non verranno sincronizzati con l'origine dati.
Importante
Se la convalida personalizzata viene eseguita dopo l'evento Validating, non influisce sul data binding. Ad esempio, se disponete di codice in un evento Validated che tenta di annullare il data binding, il data binding avrà comunque luogo. In questo caso, per eseguire la convalida nell'evento Validated, modificare la proprietà Binding.DataSourceUpdateMode del controllo da DataSourceUpdateMode.OnValidation a DataSourceUpdateMode.Nevere aggiungere your-control.DataBindings["field-name"].WriteValue() al codice di convalida.
Convalida implicita ed esplicita
Quando vengono convalidati i dati di un controllo? Dipende da te, sviluppatore. È possibile usare la convalida implicita o esplicita, a seconda delle esigenze dell'applicazione.
Convalida implicita
L'approccio di convalida implicita convalida i dati man mano che l'utente lo immette. Convalidare i dati leggendo i tasti mentre vengono premuti o, più comunemente, ogni volta che l'utente sposta lo stato attivo dal controllo. Questo approccio è utile quando si vuole fornire all'utente un feedback immediato sui dati mentre funzionano.
Se si desidera utilizzare la convalida implicita per un controllo, è necessario impostare la proprietà AutoValidate del controllo su EnablePreventFocusChange o EnableAllowFocusChange. Se si annulla l'evento Validating, il comportamento del controllo verrà determinato dal valore assegnato a AutoValidate. Se è stato assegnato EnablePreventFocusChange, l'annullamento dell'evento impedisce che si verifichi l'evento Validated . Lo stato attivo dell'input rimane sul controllo corrente fino a quando l'utente non modifica i dati in un formato valido. Se assegni EnableAllowFocusChange, l'evento Validated non si verificherà quando annulli l'evento, ma lo stato attivo passerà comunque al controllo successivo.
L'assegnazione di Disable alla proprietà AutoValidate impedisce completamente la convalida implicita. Per convalidare i controlli, usare la convalida esplicita.
Convalida esplicita
L'approccio di convalida esplicito convalida i dati contemporaneamente. È possibile convalidare i dati in risposta a un'azione dell'utente, ad esempio facendo clic su un pulsante Salva o su un collegamento Successivo. Quando si verifica l'azione dell'utente, è possibile attivare la convalida esplicita in uno dei modi seguenti:
- Chiamare Validate per convalidare l'ultimo controllo che ha perso il focus.
- Chiamare ValidateChildren per convalidare tutti i controlli figlio in un modulo o in un controllo contenitore.
- Chiamare un metodo personalizzato per convalidare manualmente i dati nei controlli.
Comportamento di convalida implicito predefinito per i controlli
I diversi controlli Windows Forms hanno impostazioni predefinite diverse per la proprietà AutoValidate. Nella tabella seguente vengono illustrati i controlli più comuni e i relativi valori predefiniti.
| Controllo | Comportamento di convalida predefinito |
|---|---|
| ContainerControl | Inherit |
| Form | EnableAllowFocusChange |
| PropertyGrid | Proprietà non esposta in Visual Studio |
| ToolStripContainer | Proprietà non esposta in Visual Studio |
| SplitContainer | Inherit |
| UserControl | EnableAllowFocusChange |
Chiusura del modulo e override della convalida
Quando un controllo mantiene lo stato attivo perché i dati contenuti non sono validi, è impossibile chiudere il form padre in uno dei modi consueti:
- Facendo clic sul pulsante Chiudi.
- Selezionando il menu Sistema>Chiudi.
- Chiamando il metodo Close a livello di codice.
In alcuni casi, tuttavia, potrebbe essere necessario consentire all'utente di chiudere il form indipendentemente dal fatto che i valori nei controlli siano validi. È possibile eseguire l'override della convalida e chiudere un modulo che contiene ancora dati non validi creando un gestore per l'evento FormClosing del modulo. Nel caso, impostare la proprietà Cancel su false. Questo forza il modulo a chiudersi. Per altre informazioni e un esempio, vedere Form.FormClosing.
Annotazioni
Se si forza la chiusura del modulo in questo modo, i dati non salvati andranno persi. Inoltre, i moduli modali non convalidano il contenuto dei controlli quando vengono chiusi. È comunque possibile usare la convalida del controllo per bloccare lo stato attivo su un controllo, ma non è necessario preoccuparsi del comportamento associato alla chiusura del modulo.
Vedere anche
.NET Desktop feedback