IIF

Résolu
Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,

avec ce code:

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim toto As RadioButton

        For Each toto In Panel1.Controls

            TextBox1.Text = IIf(toto.Checked, toto.Text, "F")
        Next
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class


et cette form


si je sélectionne rouge il m'affiche rouge
si je sélectionne vert il m'affiche F
pourquoi
merci de votre aide
cordialement

23 réponses

  • 1
  • 2
  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Car Rouge est le dernier controle testé.
    TextBox1.Text = IIf(toto.Checked, toto.Text, "F")
    0
  2. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    désolé je ne comprends pas la réponse de NHenry et la ligne de code qu'il a mis après son commentaire
    j'ai refait la form , j'ai créé deux boutons , après j'ai fait un panel et j'ai mis les deux boutons dedans
    maintenant c'est le deuxième bouton qui réagit bien
    je ne comprends pas
    est ce qu'il faut cocher quelque chose pour que les radio button appartiennent au panel
    merci de votre aide
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    voir ceci

    https://vbnetpourtous.wordpress.com/2012/12/17/linstruction-iif/

    et l'analyse de Renfield qui est en VB6 mais valable pour VB.Net

    https://codes-sources.commentcamarche.net/source/33789-attention-a-iif

    Il vaut donc mieux utiliser cette syntaxe:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim toto As RadioButton
            For Each toto In Panel1.Controls
                If toto.Checked = True Then
                    TextBox1.Text = toto.Text
                End If
            Next
        End Sub

    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    Bonjour
    En fait y’avait 2 options.
    Pour être sur que tes 2 radiobuttons sont dans le panel, il suffit de le rendre enabled = false.
    Si tu ne peux plus cliquer sur aucun, c’est qu’ils sont dedans.

    La deuxième option (la plus probable) est que ta boucle teste les 2 radiobutton

    Au premier passage ça teste vert et ça écrit vert ou f selon son état dans le texte box. Au second passage ça teste rouge et écrit rouge ou f selon son état.
    Ça va tellement vite entre les 2 passage que tu n’as pas le temps de voir.

    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Salut Whismeril,

      ton analyse est bonne il suffit de mettre un MsgBox pour voir le cheminement. Le F que l'on voit est pour le Radiobutton1 quand le 2 est coché!

      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
              Dim toto As RadioButton
              For Each toto In Panel1.Controls
                  MsgBox(toto.Name)
                  TextBox1.Text = CStr(IIf(toto.Checked, toto.Text, "F"))
              Next
          End Sub


      je pense que le If Then Else End If est préférable

      @+ Le Pivert
      0
  6. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    Là n'est pas le problème
    on me demande de faire un exercice avec IIF au lieu d'écrire plusieurs lignes de code en if.
    Ecrire plusieurs lignes de code en if ,dans ce cas présent , je sais faire
    Ce que je voudrais c'est que quelqu'un me dise comment écrire le code avec iif pour que cela marche
    si pour mon code ci dessus je fais le pas à pas détaillé
    je coche le premier radiobouton et je click sur mon button il passe d'abord sur le premier radiobouton qu'il détecte bien comme checked avec la bonne réponse et ensuite il passe au deuxième et c'est le texte du deuxième qu'il a parcouru en dernier qu'il m'affiche donc comme le dernier n'est pas coché il m'affiche F
    si je coche le deuxième d'abord là çà marche mais parcequ'il est d'abord passé par le premier puis le deuxième et qu'il m'affiche le résultat du deuxième

    je n'arrive pas à trouver le bon code , j'ai essayé de supprimer le for each mais cela ne marche pas et je ne sais pas comment donner un indice i à chaque radiobutton pour faire une boucle for i....
    merci d'une aide
    0
  7. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    je n'avais pas vu les deux réponses précédentes mais l'exercice demandé est celui là ou alors celui qui le demande fait n'importe quoi
    c'est le cours vb.net de openclassroom; il est pourtant par ailleurs très bien fait
    si je fais le cours de Tahé c'est incompréhensible trop complexe
    si je vais sur le cours de ph Lasserre , il est très bien fait mais ce n'est pas un cours par l'exercice et la pratique ; c'est une énumération , certes complète de toutes les fonctionnalités et qui représente un travail colossal mais cà ne permet pas d'apprendre vraiment
    alors comment faire pour éviter que ce for each passe deux fois et affiche le dernier
    cordialement
    0
  8. Utilisateur anonyme
     
    Tu enlèves le foreach et tu mets deux iif imbriqués
    0
  9. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    on peut mettre deux IIF mais le but de l'exercice était de diminuer les if
    car je t'ai donné un exemple simple avec deux radiosbuttons mais en fait dans l'exercice il y e n a 4
    cordialement
    0
  10. Utilisateur anonyme
     
    Tu peux mettre le lien vers l’exercice qu’on ait toutes les billes?
    0
  11. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    peux tu me dire comment te joindre un fichier pdf car le cours est en pdf

    puis je te l'envoyer sur ta bal privée

    le programme d'enseignement n'apparait plus quand on va directement dans open class room sauf si moi je me connecte avec mon login et mon mdp
    car le programme est ancien
    mais on avait la possibilité de le télécharger en pdf et je voudrais te l'envoyer en pièces jointes
    si tu savais comment joindre celui qui a rédigé le cours,cela permettrait de lui demander la solution
    ce que je trouve navrant c'est que en tant que débutant on se heurte pendant des heures sur un exercice qui à mon avis s'avère infaisable
    peut être que quand tu auras le cours , tu trouveras une solution
    c'est un exercice qui commence page 100
    0
  12. Utilisateur anonyme
     
    Tu peux le mettre sur cjoint.com ou autre service du même genre
    0
  13. Utilisateur anonyme
     
    Et bien je réitère, tu imbriques les IIF
    0
  14. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    à l'intention de Whismeril

    regardes dans le document que je t'ai envoyé l'exercice : la banderole lumineuse
    que l'auteur reconnait être difficile
    comment un apprenant qui n'en est qu'à ses débuts peut il même imaginer le code de la boucle pour faire avancer les checked des boutons sans parler de l'interval du timer qui n'a aucune utilité puisque cela marche très bien sans la bar et le reste
    existe t il des apprentissages qui soient plus progressifs et au niveau des débutants même les plus c...s
    cordialement
    0
  15. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, je ferais ainsi:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim toto As RadioButton, couleur as string
            couleur=""
            For Each toto In Panel1.Controls
                couleur = couleur & IIf(toto.Checked, toto.Text, "")
            Next
            TextBox1.Text = couleur
    End Sub
    0
  16. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    enfin merci
    c'est un exercice venant du cours que j'ai mentionné plus haut

    https://www.transfernow.net/files/?utm_source=so7Puo102020&utm_medium=&utm_content=en

    je me permets de te reposer la question posée plus haut
    existe t il des apprentissages qui soient plus progressifs et au niveau des débutants même les plus c...s
    cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il serait utile que tu décrives tes connaissances et compétences, et, surtout, tes objectifs.
      il me semble que tu devrais commencer par des exercices plus simples, pour développer la logique et la conception d'algorithmes simples. je ne pense pas que vb.net soit le bon point de départ.
      0
  17. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci de ta réponse
    Je fais cela en amateur
    J’ai déjà suivi le cours d’initiation à l’algorithme
    De ch darmangeat mais j’ai beaucoup de mal
    Peu être as tu quelques conseils ou sites à proposer pour faire des exercices plus simples
    Cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu as très peu décrit tes connaissances et compétences, et rien décrit à propos de tes objectifs.
      0
      1. Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        mon objectif n'est pas professionnel
        c'est de savoir faire des petits programmes puis plus tard des un peu plus complexes
        mais ce n'est pas du tout pour les transmettre ni les communiquer ni les installer
        c'est plus un jeu intellectuel pour apprendre
        mon niveau
        j'ai des bases d'algorithme et de prog objet à travers les cours dont je t'ai parlé plus haut
        il me semble que j'ai acquis et compris ces principes mais quand j'arrive dans les exercices proposés je cale
        car les étapes basiques je mets du temps à les réaliser alors quand j'arrive aux choses plus complexes ( qui surement te paraissent simples ) je cale et au bout d'un ou deux jours d'échec je vais voir le corrigé
        cordialement
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Partouchefrancis Messages postés 116 Date d'inscription   Statut Membre Dernière intervention  
         
        moi, je suggère de t'orienter vers le langage python.
        parce qu'il est énormément utilisé pour apprendre la programmation, à tous âges, dans tous les domaines. très souvent de façon ludique.
        et que tu trouveras donc beaucoup plus de cours et d'exercices, que tu pourras utiliser dans des domaines qui t'intéressent.
        0
  18. Utilisateur anonyme
     
    Lors d’une de tes précédentes questions, je t’ai conseillé le cours de plassere sur developpez.com
    https://plasserre.developpez.com/cours/vb-net/

    Quand à la solution de yg_be, pour le texte ok, mais ça ne marchera pas pour le background du formulaire comme c’est demandé dans ton exercice.

    Je regarderai la banderole lumineuse dans la soirée
    0
  19. Utilisateur anonyme
     
    Revenons l'exercice de la page 100

    D'abord, le cours utilise des groupBox et toi des panels.
    L'avantage du groupBox c'est que le codeur et l'utilisateur voit quels controles sont regroupés.

    Dans sa correction, il utilise le même code pour les checkbox et les radiobutton
    If Me.RB_1.Checked Then
          Me.TXT_RBNB.Text = Me.RB_1.Text
    End If
    If Me.RB_2.Checked Then
         Me.TXT_RBNB.Text = Me.RB_2.Text
    End If
    If Me.RB_3.Checked Then
        Me.TXT_RBNB.Text = Me.RB_3.Text
    End If
    If Me.RB_4.Checked Then
        Me.TXT_RBNB.Text = Me.RB_4.Text End If
    End Sub
    

    et
    If Me.RB_BLEU.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_BLEU.Text
        Me.BackColor = Color.Blue
    End If
    If Me.RB_JAUNE.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_JAUNE.Text
        Me.BackColor = Color.Yellow
    End If
    If Me.RB_ROUGE.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_ROUGE.Text
        Me.BackColor = Color.Red
    End If
    If Me.RB_VERT.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_VERT.Text
        Me.BackColor = Color.Green
    End If


    Ça marche, sauf que
    • radiobutton et checkbox sont différents (sinon pourquoi faire 2 contrôles)
    • cette structure ne tend pas vers IIF (donc ça t'aide moins)


    La différence fondamentale entre ces 2 controles, c'est que plusieurs checkbox contenues dans un même conteneur (panel, groupBox etc...) peuvent être coché, alors qu'il ne peut y avoir qu'un radioButton coché.

    Du coup, avec des IF, tu es obligé d'écrire plusieurs If Then Else pour les chekbox alors que pour les radioButtons tu peux écrire une casdade de If ElseIf Else If... Else. En effet, puisqu'il qu'il ne peut y en avoir qu'un ce n'est pas la peine de tester les suivants si tu à trouvé celui qui coché.
    C'est plus rapide d'exécution (sauf si le coché est le dernier) et c'est plus dans l'esprit du IIF.

    Ce qui donnerait
    If Me.RB_BLEU.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_BLEU.Text
        Me.BackColor = Color.Blue
    Else If Me.RB_JAUNE.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_JAUNE.Text
        Me.BackColor = Color.Yellow
    Else If Me.RB_ROUGE.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_ROUGE.Text
        Me.BackColor = Color.Red
    Else If Me.RB_VERT.Checked Then
        Me.TXT_RBCOL.Text = Me.RB_VERT.Text
        Me.BackColor = Color.Green
    End If


    Et en IIF
    Me.TXT_RBCOL.Text = IIF(Me.RB_BLEU.Checked, Me.RB_BLEU.Text, IIF(Me.RB_JAUNE.Checked, Me.RB_JAUNE.Text, 'etc...
    Me.BackColor = IIF(Me.RB_BLEU.Checked, Color.Blue, IIF( 'ect...
    

    Cela dit, c'est une écriture un peu lourde, les cascades de If Else If c'est très bien.

    Maintenant, je vais lire l'autre exercice.

    0
  • 1
  • 2