8
votes

Moyen le plus simple d'effectuer une validation de données pour les champs sur les formulaires Windows

J'ai un projet de formulaire Windows dans lequel je souhaite forcer l'utilisateur à entrer des valeurs dans certains champs avant d'appuyer sur le bouton Calculer en bas. Les champs comprennent trois paires de boutons radio , cinq boîtes de texte et une boîte à combo . Donc, fondamentalement, tous ces champs doivent contenir une valeur afin d'effectuer les calculs. De plus, les cases de texte doivent contenir des numéros - toute double valeur. De plus, je souhaite définir un ensemble de valeur maximum pour la plupart de ces boîtes de texte que l'utilisateur ne peut pas dépasser. S'il vous plaît laissez-moi savoir quel est le moyen le plus simple d'y parvenir. Je ne vois pas les contrôles de validation de champ pour des projets WinForm comme ceux disponibles dans ASP.NET. Veuillez noter que je travaille sur .NET 3.5. Actuellement, j'utilise les boîtes de messages pour communiquer ceci à l'utilisateur, à chaque fois que l'utilisateur appuie sur Calculer, je affiche des boîtes de message mentionnant le nom des champs requis qui sont actuellement vides.


2 commentaires

Lorsque l'utilisateur clique sur Calculer, vous pouvez vérifier si les champs obligatoires contiennent des valeurs requises dans les plages attendues. Sinon, vous pouvez "montrer" message en conséquence, instructrice de l'utilisateur à entrer des valeurs correctes. Je vais ajouter un échantillon de code dans une minute.


@Croshanlg c'est ce que je fais en ce moment! Cherchait une autre façon de le faire. Par exemple, prenez les contrôles de validation que nous avons dans ASP.NET. Je ressens les contrôles de validation, car ils sont positionnés juste à côté des contrôles d'entrée Aidez l'utilisateur à comprendre immédiatement ce qu'il fait mal et lui donne ainsi une meilleure expérience. Aussi aucun code n'est exécuté, ce qui permet d'économiser du temps de processus inutile


6 Réponses :


0
votes

Essayez d'utiliser un événement de validation du contrôle et de coder quelle que soit la validation dont vous avez besoin.

Voici un exemple qui utilise une fonction validateMail pour vérifier si le texte est une adresse e-mail, définit l'arrière-plan de certains (rouge ?) Couleur si elle ne correspond pas et ne laisse pas l'utilisateur de laisser le contrôle tant qu'il correspond à la correspondance. P>

Private Sub VoucherEmail_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Textbox.Validating
    If Not ValidateEmail(sender.Text) Then
        sender.backcolour = Validation.ErrorBackgrounColor
        e.Cancel = True
    End If
End Sub


1 commentaires

RE: Le commentaire d'AREK (comme je ne peux pas y avoir commenter). Je conviens que les commentaires qui apparaissent lorsque vous ne pouvez pas quitter ou avoir à cliquer peut être gênant, il est donc préférable de colorer des trucs ou de faire une liste d'erreurs affichées après que l'utilisateur clique sur un bouton ou ajoutez une étiquette (le montrer). Arek a suggéré.



4
votes

Je suppose que le moyen le plus simple de mettre en œuvre toute votre validation personnalisée consiste à disposer d'un ensemble de conditions de si les conditions à l'intérieur du bouton Cliquez sur l'événement.

private void Calculate_button_Click(object sender, EventArgs e)
{
    if(textBox1.Text == string.Empty)
    {
        MessageBox.Show("Please enter a value to textBox1!");
        return;
    }
    else if(!radioButton1.Checked && !radioButton2.Checked)
    {
        MessageBox.Show("Please check one radio button!");
        return;
    }
    else if(comboBox1.SelectedIndex == -1)
    {
        MessageBox.Show("Please select a value from comboBox!");
        return;
    }
    else
    {
        // Program logic...
    }
}


3 commentaires

Je ne recommanderais pas vraiment que c'est vraiment ennuyeux en tant qu'utilisateur de voir ce genre de validations. Supposons que vous ayez une forme avec 5 textes de texte, deux combogoxes et trois radiobuttons et je fais une erreur sur chacun d'entre eux, la validation signalera une erreur par temps, vous attendez-vous vraiment que votre utilisateur clique sur Calculez_button jusqu'à ce qu'ils aient entré toutes les informacions correctement? Je préférerais placer les étiquettes pour l'avertir de toutes ses erreurs à la fois.


C'est une terrible forme terrible de validation. À tout le moins, placez plutôt toutes les erreurs dans une liste et affichez cette liste après validation. Je ne peux pas imaginer comment je détesterais à l'aide de votre logiciel si j'étais nouveau, faites des erreurs, puis deviez fermer dix millions de boîtes de message.


@Profk upvoted ... i0. kym-cdn.com/photos/images/newsfeed/000/096/044/...



4
votes

Vous pouvez essayer ceci:

private void Calculate_button_Click(object sender, EventArgs e)
{
    RadioButton[] newRadioButtons = { radiobutton1, radiobutton2, radiobutton3 };
    for (int inti = 0; inti < newRadioButtons.Length; inti++)
    {
        if (newRadioButton[inti].Checked == false)
        {
            MessageBox.Show("Please check the radio button");
            newRadioButtons[inti].Focus();
            return;
        }
    }
    TextBox[] newTextBox = { txtbox1, txtbox2, txtbox3, txtbox4, txtbox5 };
    for (int inti = 0; inti < newRadioButtons.Length; inti++)
    {
        if (newTextBox[inti].text == string.Empty)
        {
            MessageBox.Show("Please fill the text box");
            newTextBox[inti].Focus();
            return;
        }
    }
}


1 commentaires

J'aime cette approche, j'ai eu une petite forme qui nécessitait une validation et je suis allé pour cela, simple à mettre en œuvre et à entretenir (pour de petites formes)



-2
votes
'You can try this code----- 
'Function for null validate for particular type of controls in your form
Function NullValidate() As Boolean
    NullValidate = True
    For Each ctrl As Control In Me.Controls
        If TypeOf ctrl Is TextBox Then
            If ctrl.Text = "" Then
                MessageBox.Show("Invalid input for " & ctrl.Name)
                NullValidate = False
               Exit Function
            Else
               NullValidate = True
            End If
         End If
    Next
End Function
'Function for numeric validate for particular type of controls in your form
 Function NumericValidate() As Boolean
     NumericValidate = True
    For Each ctrl As Control In Me.Controls
         If TypeOf ctrl Is TextBox Then
             If NumericValidate = IsNumeric(ctrl.text) Then
                   MessageBox.Show("Invalid input for " & ctrl.Name)
                  NumericValidate = False
                  Exit Function
             Else
                  NumericValidate = True
             End If
         End If
     Next
   End Function

Private Sub cmdCalculate_Click(sender As Object, e As EventArgs) Handles cmdSave.Click
     If NullValidate() = True Then
         If NumericValidate() = True Then
             'your statement is here
         End If
     End If
End Sub

0 commentaires

14
votes

Je suis tombé sur la même situation que vous, et j'ai trouvé une solution facile ou vous pouvez dire que la solution facile disponible pour WinForms. Winforms contient une commande ErrorProvider code> qui nous facilitera d'afficher une erreur sur le champ requis.

Le Comment: Afficher les icônes d'erreur pour la validation de formulaire fournit une brève introduction. P>

errorProvider code> peut être utilisé comme vous voulez, par exemple Pour une zone de texte, vous pouvez l'utiliser dans le gestionnaire d'événements TEXTCHANGED CODE> TEXTCHANGED ou à l'intérieur de tout autre. Disons, comme: P>

if (!int.TryParse(strNumber, out result))
{
    errorProvider.SetError(tbNumber, "Only Integers are allowed");
}
else
{
    errorProvider.Clear();
}


0 commentaires

0
votes

Je sais que c'est un vieux fil.

Mais je pense que sa valeur de réponse. P>

dans la touche Calculate Cliquez sur la fonction Ajouter P>

if(!this.ValidateChildren())
            {
                return;
            }


0 commentaires