IIF
Résoluavec 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
Le sujet porte sur l’utilisation de IIf en VB.NET pour affecter le texte d’une TextBox en parcourant des RadioButton et sur pourquoi le dernier élément du for each écrase les résultats. Plusieurs réponses proposent d’éviter le for each ou de l’arrêter dès qu’un RadioButton est Checked, notamment en utilisant des IIf imbriqués ou en remontant l’indice d’un bouton actif. D’autres indiquent des ressources d’apprentissage, des conseils sur la progression logique et des méthodes alternatives, comme remplacer le foreach par des expressions imbriquées ou s’appuyer sur des cours VB.NET. Une nuance utile ajoute que l’objectif peut être de réduire les if et de comprendre le flux d’exécution, tout en considérant que le dernier bouton non coché peut influencer le résultat.
-
Je le considère plus accessible
-
Merci de tes réponses
Si je te comprends bien tu considères le programme de Lasserre comme très bon même s’il n’est pas très « didacticiel » ni tutoriel Et qu’il n’y a pas d’exercices
Cordialement -
sans parler de l'interval du timer qui n'a aucune utilité puisque cela marche très bien sans la bar et le reste
Alors oui, ça marche sans la barre, mais pas sans intervalle..... quand tu lances un timer, il attends le temps de l'intervalle, exécute "son code", attends le temps de l'intervalle, etc....
Dans son énoncé, il a dit en gros "dans un 2eme temps essayez de faire varier la vitesse", par extension l'intervalle entre "l'allumage" du radiobutton suivant.
Donc dans un premier temps, il tu peux coder avec un intervalle fixe, mais un intervalle quand même.
Après son option, je ne l'aurais pas codée comme ça....
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
A tord ou à raison (pas facile de me remettre dans m'a peau d'ado quand j'ai commencé à coder, ça fait presque 30 ans.....) le cours considère qu'arrivé à cette page tu as vu tout ce qu'il te faut pour réaliser cet exercice- les boucles
- les tableaux
- les buttton
- les radioButton
- les timer
Maintenant avoir vu tous ces chapitres, n'est pas forcément les avoir acquis.
Pour rappel, le 19 septembre, je t'ai écris
Peut-être qu'un autre cours serait plus propice à ta formation.
Celui-ci est très accessible surtout si tu viens de VB6 ou VBA, mais il ne prend pas la mesure de l'objet dans .Net, alors que c'en est l'essence https://plasserre.developpez.com/cours/vb-net/
Celui d'openclassroom, moins accessible mais centré sur l'objet (à un moment il y avait quelques erreurs, j'espère qu'ils les ont corrigées)
Suite à ça tu as choisi de continuer le premier cours qui ne te convenait pas puis de t'attaquer à OpenClassroom
-
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 radiobuttonIf 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
etIf 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 donneraitIf 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 IIFMe.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.
-
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
-
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-
-
@yg_bemon 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 -
Contributeur@Partouchefrancismoi, 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.
-
-
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 -
Contributeurbonjour, 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 -
à 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 -
Et bien je réitère, tu imbriques les IIF
-
-
Tu peux le mettre sur cjoint.com ou autre service du même genre
-
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 -
Tu peux mettre le lien vers l’exercice qu’on ait toutes les billes?
-
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 -
Tu enlèves le foreach et tu mets deux iif imbriqués
-
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 -
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 -
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.
-
ContributeurSalut 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
-
-
ContributeurBonjour,
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
- 1
- 2