IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

ErrorProvider et CausesValidation


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut ErrorProvider empèche la fermeture de la form
    Bonjour,
    j'ai un petit problème avec l'errorProvider
    J'ai une form avec quelques textbox et quelques combos.

    Pour empêcher les champs vides je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private void txt_nom_client_comptant_Validating(object sender, CancelEventArgs e)
            {
                if (txt_nom_client_comptant.Enabled == true)
                {
                    string error = null;
     
                    if (txt_nom_client_comptant.Text.Length == 0)
                    {
                        error = "Veuillez saisir un nom";
                        e.Cancel = true;
                    }
     
                    ep.SetError((Control)sender, error);
                }
            }
    Malgré le fait que j'ai mis le bouton Annuler de la form en causes validation=false, la form persiste à ne pas se fermer dès que l'erreur est déclenchée, et ça que j'utilise le bouton annuler, la touche Echap ou le bouton de fermeture de la forme.
    D'ailleurs, j'ai mis un point d'arrêt sur le onclick du bouton annuler, l'évènement n'a même pas l'air d'être déclenché.

    Ou est mon erreur ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bilou972 Voir le message
    il y avait d'ailleurs un sujet sur le forum ou quelqu'un conseillait de ne pas utiliser ce contrôle
    Je ne sais pas exactement où est le problème, mais ça n'a rien à voir avec le composant ErrorProvider, qui ne fait qu'afficher des infos sur l'erreur. Ce n'est pas lui qui fait la validation.

    Je viens de faire un petit test, ça fonctionne sans problème chez moi, y compris avec un ErrorProvider... tu n'aurais pas autre chose dans ton code qui pourrait interférer ?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne sais pas exactement où est le problème, mais ça n'a rien à voir avec le composant ErrorProvider, qui ne fait qu'afficher des infos sur l'erreur. Ce n'est pas lui qui fait la validation.

    Je viens de faire un petit test, ça fonctionne sans problème chez moi, y compris avec un ErrorProvider... tu n'aurais pas autre chose dans ton code qui pourrait interférer ?
    Je ne pense pas avoir fait quelque chose de spécial. Sur le bouton valider de la form j'ai aussi mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     private void btn_valider_Click(object sender, EventArgs e)
            {
                //Valide tous les champs qui gèrent l'évènement validating.
               if( this.ValidateChildren(ValidationConstraints.Visible & ValidationConstraints.Enabled &  ValidationConstraints.Selectable & ValidationConstraints.TabStop))
               {
    /*Code de l'appli*/
    }
     
    }
    Je vais essayer de retrouver le sujet ce soir.
    J'ai peut être oublié de préciser que je voulais fermer la form en laissant les champs vides. Tu as essayé ça ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    voilà ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
            private void textBox1_Validating(object sender, CancelEventArgs e)
            {
                if (textBox1.TextLength == 0)
                {
                    errorProvider1.SetError(textBox1, "Le champ ne doit pas être vide");
                    e.Cancel = true;
                }
                else
                {
                    errorProvider1.SetError(textBox1, null);
                }
            }
     
            private void btnOK_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.Cancel;
                Close();
            }
     
            private void btnAnnuler_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.OK;
                Close();
            }
    (avec btnAnnuler.CausesValidation = false)

    Si je clique sur OK alors que textBox1 est vide, le focus reste sur textBox1 et l'ErrorProvider s'affiche.
    Par contre si je clique sur Annuler, la fenêtre se ferme sans problème même si textBox1 est vide.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Dans mon appli, le fait de fermer la form déclenche l'événement validating sur les contrôles. Je remarque que tu fais Close(); simplement alors que je fais this.close();. Peut être une piste ?

    Essaie de taper du texte dans ta textbox, de tout supprimer puis de fermer par la croix de la fenêtre. C'est un cas qui bug chez moi.

    J'ai trouvé un article en anglais qui parle de mon problème
    http://connect.microsoft.com/VisualS...dbackID=305355

    Placer une textbox sur la form, connecter un eventhandler a son événement validating et faites e.cancel = true.
    Placez un bouton sur la form, sur l événement click appelez form.close();
    Mettez causesvalidation = false pour la form et le bouton. Lancez l'application puis cliquez sur la croix. La form ne se ferme pas.
    J'ai temporairement résolu le problème en mettant le code suivant on form load comme conseillé dans l'article.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.AutoValidate = System.Windows.Forms.AutoValidate.Disable;

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bilou972 Voir le message
    Je remarque que tu fais Close(); simplement alors que je fais this.close();. Peut être une piste ?
    Non, c'est pareil

    Citation Envoyé par bilou972 Voir le message
    Essaie de taper du texte dans ta textbox, de tout supprimer puis de fermer par la croix de la fenêtre. C'est un cas qui bug chez moi.
    Ben j'ai testé tous les cas possibles, fermeture de la fenêtre, taper du texte et le supprimer, etc... pas de problème chez moi. C'est peut-être lié à ta config ? Moi je suis sous Vista avec VS2008 SP1

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben j'ai testé tous les cas possibles, fermeture de la fenêtre, taper du texte et le supprimer, etc... pas de problème chez moi. C'est peut-être lié à ta config ? Moi je suis sous Vista avec VS2008 SP1
    Windows Xp
    Microsoft Visual Studio 2008
    Version 9.0.21022.8 RTM
    Microsoft .NET Framework
    Version 3.5

    Édition installée*: Professional

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ben je viens de tester sur mon PC du boulot sous XP : pareil, ça marche nickel...

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Ok, est ce que tu peux tester ceci stp?

    Déclenches l'erreur en validant ta form avec une textbox vide.
    Sans rien écrire dans ta textbox, essaie de fermer la form.

    Si encore une fois ça marche chez toi sans problème ...

    Il faudrait peut être que je passe en sp1 ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bilou972 Voir le message
    Si encore une fois ça marche chez toi sans problème ...
    Bon ben on dirait que c'est pas ton jour
    Ca marche aussi sans problème chez moi

    Citation Envoyé par bilou972 Voir le message
    Il faudrait peut être que je passe en sp1 ?
    Ca m'étonnerait que ça change quoi que ce soit, il n'y pas de changements sur Windows Forms

Discussions similaires

  1. Ne pas utiliser CausesValidation / Validate
    Par Gildas Huart dans le forum Vos contributions VB6
    Réponses: 9
    Dernier message: 25/07/2006, 18h14
  2. [VB.net][VS2005] Validation d'une form avec errorProvider
    Par WriteLN dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/05/2006, 13h02
  3. [C#] - ErrorProvider et checkbox
    Par Erakis dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/02/2006, 14h25
  4. []Validate / CausesValidation => Ne pas utiliser
    Par Gildas Huart dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/08/2005, 10h55
  5. [VB6] [Validate et CausesValidation] Ca marche pas toujours !!!
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 16/12/2003, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo