Panoramica di come convalidare l'input dell'utente (Windows Form .NET)

Quando gli utenti immettono i dati nell'applicazione, è consigliabile verificare che i dati siano validi prima che vengano usati dall'applicazione. È possibile 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.

Importante

La documentazione di Desktop Guide per .NET 7 e .NET 6 è in fase di costruzione.

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 MaskedTextBox controllo . Una maschera è una stringa costituita da caratteri di una lingua di maschera che specifica quali caratteri possono essere immessi in qualsiasi posizione nella casella di testo. Il controllo visualizza un set di richieste all'utente. Se l'utente digita una voce non corretta, ad esempio, l'utente digita una lettera quando è necessaria una cifra, il controllo rifiuterà 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 usato 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 che siano conformi alle specifiche del campo dati.

Convalida guidata dagli eventi

Se si vuole 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 che si verifica ogni volta che il controllo richiede la convalida dei dati. Validating Nel metodo di gestione degli 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 ^(\d{5})(-\d{4})?$regolare . Per convalidare il modulo A#A #A#, è possibile usare l'espressione [A-Z]\d[A-Z] \d[A-Z]\dregolare . Per altre informazioni sulle espressioni regolari, vedere Espressioni regolari .NET ed esempi di espressioni regolari.

  • Se il codice postale deve essere un codice postale valido Stati Uniti codice postale, è possibile chiamare un servizio Web con codice postale per convalidare i dati immessi dall'utente.

L'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à dell'oggetto Cancel su true. Se non si imposta la Cancel proprietà, Windows Form presupporrà che la convalida sia riuscita per tale controllo e generi l'eventoValidated.

Per un esempio di codice che convalida un indirizzo di posta elettronica in un TextBox, vedere il riferimento all'evento Validating .

Controlli associati a dati di convalida 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 usa il data binding, i dati nel controllo vengono sincronizzati con l'origine dati durante l'esecuzione dell'evento Validating . Se si annulla l'evento Validating , i dati non verranno sincronizzati con l'origine dati.

Importante

Se si dispone di una convalida personalizzata che viene eseguita dopo l'evento Validating , non influirà sul data binding. Ad esempio, se si dispone di codice in un Validated evento che tenta di annullare il data binding, il data binding si verificherà comunque. In questo caso, per eseguire la convalida nell'evento Validated , modificare la proprietà del Binding.DataSourceUpdateMode 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? Questo è per te, lo 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 quando vengono premuti o più comunemente ogni volta che l'utente allontana lo stato attivo di input 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à del AutoValidate 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 causerà la mancata esecuzione dell'evento Validated . Lo stato attivo dell'input rimarrà sul controllo corrente fino a quando l'utente non modifica i dati in un formato valido. Se è stato assegnato EnableAllowFocusChange, l'evento Validated non si verificherà quando si annulla l'evento, ma lo stato attivo passerà comunque al controllo successivo.

L'assegnazione DisableAutoValidate alla proprietà impedisce completamente la convalida implicita. Per convalidare i controlli, è necessario 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 Avanti . Quando si verifica l'azione dell'utente, è possibile attivare la convalida esplicita in uno dei modi seguenti:

  • Chiamare Validate per convalidare l'ultimo controllo per avere perso lo stato attivo.
  • Chiamare ValidateChildren per convalidare tutti i controlli figlio in una maschera o in un controllo contenitore.
  • Chiamare un metodo personalizzato per convalidare manualmente i dati nei controlli.

Comportamento di convalida implicito predefinito per i controlli

Diversi controlli Windows Form 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 Chiudi sistema>.
  • Chiamando il Close metodo 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 del FormClosing modulo. Nell'evento impostare la Cancel proprietà su false. In questo modo il form viene chiuso. Per altre informazioni e un esempio, vedere Form.FormClosing.

Nota

Se si forza la chiusura del modulo in questo modo, tutti i dati nei controlli del modulo che non sono già stati salvati vengono 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.

Vedi anche