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

Delphi Discussion :

Checkbox - validation conditionnelle


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Checkbox - validation conditionnelle
    Bonjour

    Je voudrais mettre une condition sur l'activation ou la désactivation d'une checkbox.
    Pour cela, j'ai commencé par implémenter l'évènement [OnClick] et dedans je défini un bout de code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (MyCheckBox.checked) and (Application.MessageBox('Etes-vous sure ?','',MB_OKCANCEL)=IDOK) then 
       MyCheckBox.Checked = false;
    Le problème est que lorsque je décoche (ou recoche) ma checkbox, l'évènement se reproduit. Quelqu'un saurait-il comment contourner ce problème et modifier l'état de la checkbox SANS déclencher l'évènement ?

    Merci d'avance
    Basteo

  2. #2
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    autre astuce; met le chekbox sur une panel, et selon ton choix change le enable du panel

  3. #3
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Tu pourrais par exemple, créer un Boolean en globale. Ensuite, dans ton code, tu teste si sa valeur est positive ou négative, et si elle est positive, tu execute ton code (et tu affecte false à ta variable bien sûr !). Ca devrait faire quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (MyCheckBox.checked) and (Application.MessageBox('Etes-vous sure ?','',MB_OKCANCEL)=IDOK) and (TaVariable=false) then
    begin
      MyCheckBox.Checked = false;
      TaVariable:=true;
    end;

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    J'ai mal choisi mes termes au début du texte : ce n'est pas activé/désactivé mais plutôt coché/décoché ma checkbox.

    Donc, au final, je voudrais pouvoir demander à l'utilisateur s'il désire oui ou non valider son choix de coché/décoché la checkbox.

    Merci pour la rapidité
    Basteo

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    ARGH !! Même si j'aimais pas trop l'idée d'une variable globale pour ça, ça paraissait sympa, mais en fait l'idée ne fonctionne pas.

    Tout se passe comme si l'évènement onClick attendait d'avoir fini de se déroulé pour placer la case à cocher dans l'état demandé lors de l'action onclick.

    Je trouve ça dommage qu'il n'y ai pas une méthode qui permette de valider ou non le choix de l'utilisateur (un peut comme les OnChange et OnChanging d'un PageControl).


    Basteo.

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    un bricolage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.CheckBox2Click(Sender: TObject);
    var  b:boolean;
    begin
         b:=CheckBox2.Checked;
         if not b then exit;
         CheckBox2.OnClick:=nil;
         CheckBox2.Checked:=not b;
         if (b) and (Application.MessageBox('Etes-vous sure ?','',MB_OKCANCEL)=IDOK)  then
         begin
            CheckBox2.Checked:=b;
         end;
         CheckBox2.OnClick:=CheckBox2Click;
    end;

  7. #7
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Points : 161
    Points
    161
    Par défaut
    Une façon peut-être plus élégante de le faire: utiliser l'événement OnMouseDown du contrôle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if (Application.MessageBox('Etes-vous sur ?','',MB_OKCANCEL)=IDOK) then
       CheckBox1.checked := not CheckBox1.checked;
    end;
    Avantage: ça fonctionne parfaitement

    Inconvénient: si on click sur le label de la checkbon, l'événement est généré. De plus, le contrôle ne réagit plus aux événements du clavier... On peut contourner le problème en gérant également l'événement OnKeyPress, mais ça devient vite le bordel ^^

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    il veut que la tchekbox ne change d'etat qu'aprés confirmation pas aprés

  9. #9
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par edam
    il veut que la tchekbox ne change d'etat qu'aprés confirmation pas aprés
    J'ai rien compris à ce commentaire

    Et si cela concerne mon code, il fonctionne, je l'ai testé avant de poster...

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    Merci Gaadek, ton code fonctionne

    Et encore merci à tout le monde pour son aide.

    Basteo

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    A mettre dans le Onclick du checkbox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (not TCheckBox(Sender).checked) then
      case (Application.MessageBox('Etes-vous sure ?','',MB_OKCANCEL)) of
        IDOK : TCheckBox(Sender).Checked := false;
        IDCANCEL : TCheckBox(Sender).Checked := True;
      end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/11/2007, 16h18
  2. Peut-on faire une validation conditionnelle ?
    Par chriscoolletoubibe dans le forum Struts 2
    Réponses: 2
    Dernier message: 06/09/2007, 09h22
  3. Checkbox validées par un commandbutton
    Par toma65 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/05/2007, 15h24
  4. [VB.NET] Checkbox : Validation
    Par BenoitM dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/09/2006, 14h16
  5. [HTML][checkbox] valider par défault
    Par hutchuck dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 28/11/2005, 12h44

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