locked
Problème avec errorProvider RRS feed

  • Question

  • Bonjour, je souhaite vérifier les données saisies d'un utilisateur sur mon formulaire. J'ai utilisé le composant errorProvider qui permet de tester les différents champs. Mais j'ai deux problèmes : Quand la première zone de texte est valide, quelque soit par la suite le type de l'erreur, ce composant pointe sur le premier control textbox en affichant le message d'erreur de la zone qui n'est pas valide. Comment je peux modifier l'emplacement du errorProvider à la zone qui contient l'erreur ?

    Deuxièment je souhaite bloquer le clique sur un bouton tanque les données ne sont pas valides : voilà mon code
    // 1 er champ à vérifier
    
    private void txtIP_Validating(object sender, CancelEventArgs e)
            {
                String controleIP = @"^(25[0-4]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-4]|2[0-4]\d|[0-1]?\d?\d)){3}$";
                Regex regex = new Regex(controleIP);
                if (regex.IsMatch(txtIP.Text))
                {
                    errorProvider.SetError(txtIP, "");
                  
                }
                else
                {
                    errorProvider.SetError(txtIP, "Adresse IP Invalide");
                }           
    
            }
    
    
    // 2 ème champ à vérifier
    
    private void txtPort_Validating(object sender, CancelEventArgs e)
            {
                String controlePort = @"^(4915[0-1]|491[0-4]\d|490\d\d|4[0-8]\d{3}|[1-3]\d{4}|[2-9]\d{3}|1[1-9]\d{2}|10[3-9]\d|102[4-9])$ ";
                Regex regex = new Regex(controlePort);
                if (regex.IsMatch(txtPort.Text))
                {
                    errorProvider.SetError(txtPort,"");
                    //e.Cancel = false;
    
                }
                else
                {
                    errorProvider.SetError(txtIP, "Port invalide");
                    //e.Cancel = true;
                }           
            }
    
    // Bouton exécute un code si les données sont valides
    
    private void btnConnexion_Click(object sender, EventArgs e)
            {
                bool invalidInput = false;
    
                foreach (Control ctrl in this.groupBox1.Controls)
                {
                    if (errorProvider.GetError(ctrl) != "")
                    {
                        invalidInput = true;
                        break;
                    }
                
                }
    
                if (invalidInput==true)
                {
                    MessageBox.Show("Vous avez saisi des données invalides", "Données erronnées", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                 // traitement
               }
    
    }
    mercredi 20 mai 2009 11:55

Réponses

  • Et bien, je déclarerais 2 variables booléennes privées au niveau de mon formulaire. J'adapterais la valeur de chaque variable à la sortie des validations en fonction de leur résultat. Et je créerai une petite procédure à appeler à chaque sortie de validation qui activerait le bouton si les 2 variables sont à l'état true et ne l'activerait pas dans les autres cas.
    • Proposé comme réponse Troxsa jeudi 21 mai 2009 21:20
    • Marqué comme réponse Gilles TOURREAU dimanche 28 juin 2009 19:49
    mercredi 20 mai 2009 19:27

Toutes les réponses

  • Bonjour,

    C'est au niveau du code de votre procédure txtPort_Validating(...)

    Dans votre else (qui se passe si le port est invalide), vous avez indiqué le mauvais contrôle. Vous devriez indiquer

    errorProvider.SetError(txtPort, "Port invalide");

    Voilà qui résoudra déjà votre premier problème
    • Modifié V HELLIN mercredi 20 mai 2009 12:44
    mercredi 20 mai 2009 12:43
  • D'accord, je vous remercie pour votre réponse. Avez vous une idée sur le 2 ème problème?
    mercredi 20 mai 2009 16:57
  • Et bien, je déclarerais 2 variables booléennes privées au niveau de mon formulaire. J'adapterais la valeur de chaque variable à la sortie des validations en fonction de leur résultat. Et je créerai une petite procédure à appeler à chaque sortie de validation qui activerait le bouton si les 2 variables sont à l'état true et ne l'activerait pas dans les autres cas.
    • Proposé comme réponse Troxsa jeudi 21 mai 2009 21:20
    • Marqué comme réponse Gilles TOURREAU dimanche 28 juin 2009 19:49
    mercredi 20 mai 2009 19:27