Cercherò di rispondere a entrambe le parti tecniche della domanda tra un po ', ma vorrei iniziare sottolineando che convalidare un modulo nella sua interezza prima di fornire un feedback (limitato) sui problemi riscontrati è un po' obsoleto.
Puoi leggere le ultime informazioni sull'usabilità (e il campo correlato) sul sito dedicato allo scambio di stack. Nota comunque che una delle tecniche più recenti probabilmente preverrà il tuo problema attuale, quindi potrebbe essere saggio leggere prima di continuare con la tua attuale soluzione.
Tuttavia, potresti essere bloccato con codice meno recente o avere requisiti specifici per implementare il modulo, così come cercherò di rispondere alla tua domanda da un punto di vista tecnico.
Si noti che il metodo Focus non lo è solo per attirare l'attenzione su un controllo specifico sul modulo.
Anche (o, secondo me, invece) rende un controllo il controllo attivo. Ciò consentirà al tuo programma di scoprire su quale controllo deve essere premuto un tasto o il clic del mouse.
Stai cercando un modo per verificare se tutti i campi obbligatori hanno valori senza creare codice duplicato. Questa è una buona attitudine!
Se mi venisse chiesto di farlo, proverei a trovare i punti in comune (le parti che sono duplicate).
Nel tuo esempio, questo sarebbe il controllo se una casella di testo contiene o meno un valore e la segnalazione del problema se viene rilevato un problema.
Creo quindi un metodo in cui memorizzo il codice comune e "inietto" il codice non comune, che nel tuo esempio sono le diverse caselle di testo.
Non ho scritto alcun VB dal VB 6, quindi spero che il pseudo codice VB qui sotto ottenga il punto.
Il metodo:
Private Function TextBoxContainsValue(textBoxToCheck as TextBox, labelText String) as Boolean
If textBoxToCheck.Text = "" Then
textBoxToCheck.Focus()
MessageBox.Show("The text box labelled " + labelText + " is required. Please enter a valid value.");
TextBoxContainsValue = False
Else
TextBoxContainsValue = True
End If
End Function
Il tuo codice attuale può quindi cambiare in qualcosa del tipo:
If Not TextBoxContainsValue(txt_ClassA, "Class A") Then
' No need to check the other text boxes since we can put the focus on just one control.
Exit Sub
End If
If Not TextBoxContainsValue(txt_ClassB, "Class B") Then
Exit Sub
End If
If Not TextBoxContainsValue(txt_ClassC, "Class C") Then
Exit Sub
End If
Ancora una volta, si tratta solo della parte tecnica della tua domanda (aggiunge anche un po 'più di informazioni su quale casella di testo è stata trovata vuota).
La ricerca di "convalida del modulo" nel sito Scambio pila esperienza utente (disponibile in:) ha generato oltre 50 pagine di domande.
Fai un grande favore a te stesso e ai tuoi utenti, controlla almeno alcuni di loro per avere un'idea su come migliorare l'esperienza degli utenti.