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 :

switch case en delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut switch case en delphi
    Bonjour,

    Je suis débutant en delphi et je voudrai savoir si il existe une manière de faire un switch en delphi car j'aimerai sélectionner une checkbox et suivant la checkbox sélectionner lui donner une valeur qui sera un string, car je veux creer un fichier ou je rentre le nom et suivant la case selectionner par la suite ce string viendra s'ajouter a la fin du nom,
    exemple nom : toto et parmi mes checkbox choix1 choix2 choix3 si je choisis la première alors le nom de mon fichier sera totochoix1

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut,

    Oui cela existe, il s'agit de l'instruction case...of, l'instruction ne fonctionne qu'avec des valeurs scalaires (entier, enumérés), pour les autres types, il faut employer des if...else imbriqués.

    Force est de constater que la lecture de la documentation standard ou l'étude des tutoriaux généreusement mis à disposition dans ce forum te feront le plus grand bien.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut
    je vous remercie de votre réponse, donc si j'ai bien compris dans mon cas je dois faire des if ... else comme l'exemple suivant :

    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
    26
    27
    28
    29
     
    if (Checkbox1.checked) then 
          begin                             
            msg := 'toto1';
          end                                      
        else
          if (Checkbox2.checked) then
            begin
              msg := 'toto2';
            end
          else 
            if (Checkbox3.checked) then
              begin
                msg := 'toto3';
              end
            else
              if (Checkbox4.checked) then
                begin
                  msg := 'toto4';
                end  
              else
                if (Checkbox5.checked) then
                  begin
                    msg := 'toto5';
                  end
                else
                  begin                                                          
                    showmessage(' Erreur, aucune case cochée ');
                  end;

  4. #4
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Oui, question style, dans le cas des alternatives imbriquées, je n'indente pas de cette façon mais j'aligne tous les cas au même niveau, comme s'il s'agissait d'un case..of, cela permet de conserver une bonne lisibilité malgré tout.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Si une seule case à la fois peut être cochée. Autant utiliser des bouton radio à la place des case à cocher.
    Encore mieux utiliser un TRadioGroup. Tu pourras même utiliser le case of.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    case (MonRadioGroup.ItemIndex) of
      0 : msg := 'toto1';
      1 : msg := 'toto2';
      2 : msg := 'toto3';
      3 : msg := 'toto4';
      4 : msg := 'toto5';
    else
      msg := 'Erreur, aucune case cochée ';
    end;

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Par défaut
    Merci de vos réponses.
    De quel manière indentez vous ? Je n'arrive pas trop a visualiser votre façon de faire.
    Dans mon cas je dois mal placer mon message d'erreur car lorsque je coche aucune cases il me l'indique mais il me créer un fichier avec la dernière case coché précédemment aussi, et comment faire pour interdire de cocher plusieurs cases

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Citation Envoyé par reuqnas Voir le message
    Dans mon cas je dois mal placer mon message d'erreur car lorsque je coche aucune cases il me l'indique mais il me créer un fichier avec la dernière case coché précédemment aussi, et comment faire pour interdire de cocher plusieurs cases
    Pour n'avoir qu'une seule case de cochée à la fois, choisir les TRadioButton (comme l'a dit popo) au lieu des TCheckBox. Et pour être sûr d'avoir au moins une case cochée, la pré-cocher !
    Ensuite tu peux ruser pour simplifier ton code, par ex. en nommant directement tes TRadioButton en toto1, toto2, toto3, etc. et dans le OnClick du premier TRadioButton tu fais un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg := (Sender as TRadioButton).Name;
    et tu assignes le même événement aux autres TRadioButton

    Tu peux aussi passer par la propriété Tag et faire quelque chose comme:
    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
    var
      msg: string;
      i: Integer;
    begin
      i := (Sender as TRadioButton).Tag;
      case i of
        1: msg := 'toto1';
        2: msg := 'toto2';
        3: msg := 'toto3';
        4: msg := 'toto4';
        5: msg := 'toto5';
        6: msg := 'toto6';
      end;
     
      // travail avec msg...
    end;
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z Test.7z (276,3 Ko, 172 affichages)

  8. #8
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    C'est plutôt simple, en reprenant ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      if (Checkbox1.checked) then 
        msg := 'toto1'
      else if (Checkbox2.checked) then
        msg := 'toto2'
      else if (Checkbox3.checked) then
        msg := 'toto3'
      else if (Checkbox4.checked) then
        msg := 'toto4'
      else if (Checkbox5.checked) then
        msg := 'toto5'
      else
        showmessage(' Erreur, aucune case cochée ')
      end;
    Ca ne change rien sur la fonction du code mais je trouve que la structure du code ressort tout aussi bien et évite à l’œil des translations inutiles.
    Je me suis permis d'ôter les begin/end qui alourdissent un peu le texte.
    Pour interdire de cocher plusieurs, utilise un radiogroup, composant spécialement réservé à cet effet (un choix unique parmi des alternatives exclusives), comme le suggère popo.
    Par contre,
    car lorsque je coche aucune cases il me l'indique mais il me créer un fichier avec la dernière case coché précédemment aussi
    c'est assez curieux, n'aurais-tu pas placé le code en question dans un gestionnaire OnClick partagé entre toutes les CheckBox ?

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. [Language]Probleme de switch case
    Par nana1 dans le forum Langage
    Réponses: 20
    Dernier message: 17/11/2005, 00h49
  2. switch case pour deux variable en meme temps
    Par petitours dans le forum C
    Réponses: 3
    Dernier message: 06/11/2005, 19h20
  3. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  4. probleme gestion condition switch - case
    Par DarkMax dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2005, 14h25
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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