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
6 Réponses :
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
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é.
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... } }
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/...
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; } } }
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)
'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
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();
}
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; }
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