Sélection de 4 boutons avec 2 couleurs différentes + la réponse après 3 secondes

yannel777 Messages postés 161 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Bonjour,

Je fais un programme avec actuellement 2 question qui amène à 4 propositions dont deux sont valides.

Voici la fonction pour les 4 boutons en même temps.

Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
        Dim B As Button = CType(sender, Button)


cette commande permet de mettre les toutes les réponses en vert avec un clique puis avec un second clique des même boutons les remettre à la couleur par défaut.

If B.ForeColor = Color.White And B.BackColor = Color.Green Then
            B.ForeColor = Color.Black
            B.BackColor = Color.Transparent
        Else
            B.ForeColor = Color.White
            B.BackColor = Color.Green
        End If
End Sub


et concernant la réponse, j'aimerai bien le mettre après un Timer de 3 seconde.

voici la commande concernant la réponse:

'IndiceQuestionActuelle est uune variable globale qui permet à toute portion de code de savoir de quelle question on s'occupe à cet instant.
        ' Dans cette procédure (BResponse_Click), il s'agit de vérifier le bon choix du bouton (A, B, C et D) fait par l'utilisateur pour la question actuellemebt posée.
        ' Bref, il s'agit de savoir s'il a bien répondu à cette paire de questions et d'agir en conséquence (ici, ça se résume à changer la couleur des boutons).

        ' Marquage à l'écran des bonnes réponses faites. Si le bouton cliqué est celui de la bonne réponse, il devient Yellow, sinon il devient Gray
        ' Les boutons qui ne sont pas cliqués restent dans le couleur d'affichage de départ.
        If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Or
            B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
            B.BackColor = Color.Green
        Else
            B.BackColor = Color.Red
        End If

        ' Marquage dans le tableau des questions des bonnes réponses faites : la réponse (A ou B, et C ou D) est remplacée par OK si la réponse a été correcte
        ' Il est alors possible de relire le tableau (à faire ... ) en agissant selon que le RepOK1 vaut "OK" ou non, pour la question primaire
        ' et selon que le RepOK2 vaut "OK" ou non, pour la question secondaire
        Select Case B.Text
            Case "A", "B"
                If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Then
                    TableauDesQuestions(IndiceQuestionActuelle).RepOK1 = "OK"
                End If
            Case "C", "D"
                If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                    TableauDesQuestions(IndiceQuestionActuelle).RepOK2 = "OK"
                End If
        End Select
End Sub


cela est possible ou pas ?

(PS: Les lignes de commande sont vérifiées et bonnes, il manque juste à mettre un Timer de 3 secondes entre les deux).

Merci de votre compréhension.

Configuration: Windows / Chrome 73.0.3683.103


Même les gens résolus n'ont pas toujours la solution, là est le problème.

5 réponses

  1. Utilisateur anonyme
     
    Bonjour
    Peux tu détailler à quel moment (pour l’utilisateur) tu veut un délai?
    0
    1. yannel777 Messages postés 161 Statut Membre 35
       
      Bobjour,

      voici ce que je souhaitai avoir:



      ou la deux deuxième solution



      cela dépendra quel est le mieux.

      On m'a parler de "la méthode sleep" aussi qu'on peut utiliser mais cependant je ne l'a connais pas.
      si vous avez aussi un exemple à me proposer en rapport avec mon programme afin que je comprenne mieux.



      Merci de votre compréhension.
      0
  2. Utilisateur anonyme
     
    Thread.Sleep va figer ton logiciel car tu es dans le thread principal.
    Cela pourrait être une solutuion si tu faisais du multithread.

    Dans ton cas le timer est plus adapté.
    Il faut que tu mettes tout le code à retarder dans le tick du timer.
    Il faut aussi que ta variable B soit déclarée dans la classe et plus dans le bouton.

    Dans le bouton tu demarres le timer et dans le timer tu l’arrêtes sinon il va répéter le code toutes les 3 secondes.

    0
    1. yannel777 Messages postés 161 Statut Membre 35
       
      Oui justement, c'est la variable B qui me pose problème, comment la déclarer?

      je souhaiterai le mettre sans bouton apparenté
      je souhaiterai qu'il se fasse après cela

      Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
              Dim B As Button = CType(sender, Button)
              If B.ForeColor = Color.White And B.BackColor = Color.Green Then
                  B.ForeColor = Color.Black
                  B.BackColor = Color.Transparent
              Else
                  B.ForeColor = Color.White
                  B.BackColor = Color.Green
              End If
          End Sub



      voici ce que j'ai fait:

      0
  3. Utilisateur anonyme
     
    Voila comment déclarer B.

    Dim B As Button
    Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
            B = CType(sender, Button)


    Et c’est dans le bouton qu’il faut démarrer le timer.
    Pour du code, merci de ne pas mettre de capture, les balises sont là pour ça
    0
    1. yannel777 Messages postés 161 Statut Membre 35
       
      Bon jour,

      Merci pour ce tuyau,

      Et concernant les capture c'était pour vous montré les erreur qui sont en rouge et qu'on ne vous pas forcément si je les met sous forme de balise écrite.

      cependant j'ai une problème pour affecter une commande à partir du timer voici mon erreur:



      Merci beaucoup cordialement.
      0
    2. Utilisateur anonyme
       
      Sauf que je ne les ai pas vues tes erreurs sur ta capture précédente parce que j'étais sur un téléphone.
      Et là que j'en vois une je ne peux pas copier coller pour t'expliquer.
      0
    3. yannel777 Messages postés 161 Statut Membre 35
       
      Désolé, je ne savais pas que vous êtiez sur téléphone.

      Voici le code:

      Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
              Dim B As Button = CType(sender, Button)
              If B.ForeColor = Color.White And B.BackColor = Color.Green Then
                  B.ForeColor = Color.Black
                  B.BackColor = Color.Transparent
              Else
                  B.ForeColor = Color.White
                  B.BackColor = Color.Green
              End If
              Timer1.Start()
              Timer1.Interval = 2000
      
          End Sub
          Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
              If Timer1.Interval = 2000 Then
                  AfficheReponseQuestion()
              End If
      
          End Sub
      
      
          Dim C As Button
          Private Sub AfficheReponseQuestion(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
              C = CType(sender, Button)
      
              'IndiceQuestionActuelle est uune variable globale qui permet à toute portion de code de savoir de quelle question on s'occupe à cet instant.
              ' Dans cette procédure (BResponse_Click), il s'agit de vérifier le bon choix du bouton (A, B, C et D) fait par l'utilisateur pour la question actuellemebt posée.
              ' Bref, il s'agit de savoir s'il a bien répondu à cette paire de questions et d'agir en conséquence (ici, ça se résume à changer la couleur des boutons).
              ' Marquage à l'écran des bonnes réponses faites. Si le bouton cliqué est celui de la bonne réponse, il devient Yellow, sinon il devient Gray
              ' Les boutons qui ne sont pas cliqués restent dans le couleur d'affichage de départ.
              If C.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Or
                  C.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                  C.BackColor = Color.Green
              Else
                  C.BackColor = Color.Red
      
              End If
              ' Marquage dans le tableau des questions des bonnes réponses faites : la réponse (A ou B, et C ou D) est remplacée par OK si la réponse a été correcte
              ' Il est alors possible de relire le tableau (à faire ... ) en agissant selon que le RepOK1 vaut "OK" ou non, pour la question primaire
              ' et selon que le RepOK2 vaut "OK" ou non, pour la question secondaire
              Select Case C.Text
                  Case "A", "B"
                      If C.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK1 = "OK"
                      End If
                  Case "C", "D"
                      If C.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK2 = "OK"
                      End If
              End Select
      
              ' '' Il y a les Label des questions et des réponses : ils peuvent aussi être coloriés ...
              'LQuestion1.BackColor ...   et ForeColor aussi ...
              'LResponseA.BackColor ...
              'LResponseB.BackColor ...
              'LQuestion2.BackColor ...
              'LResponseC.BackColor ...
              'LResponseD.BackColor ..
              Timer1.Stop()
      
          End Sub
      0
  4. Utilisateur anonyme
     
    Alors cette méthode
    Private Sub AfficheReponseQuestion(ByVal sender As System.Object, ByVal e As System.EventArgs)
    demande en paramètre un object et un System.EventArgs

    et là
            If Timer1.Interval = 2000 Then
                AfficheReponseQuestion()
            End If

    tu ne luis fournis pas. En passant, je pense que le if ne sert à rien.

    Avant d'aller plus loin, pourquoi avoir abonner 2 méthodes au click de tes boutons?
    Ce que ça fait faire c'est:
    • appeler simultanément BResponse_Click et AfficheReponseQuestion
    • au bout de 2 secondes appeler une 2eme fois AfficheReponseQuestion


    0
    1. yannel777 Messages postés 161 Statut Membre 35
       
      oui j'avais pensez aussi de le faire mais je ne trouve pas le moyen de le faire.

      Le premier met les couleur de section en vert:

      Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
              Dim B As Button = CType(sender, Button)
              If B.ForeColor = Color.White And B.BackColor = Color.Green Then
                  B.ForeColor = Color.Black
                  B.BackColor = Color.Transparent
              Else
                  B.ForeColor = Color.White
                  B.BackColor = Color.Green
              End If
             
      
          End Sub
      



      et le deuxième met les couleur pour signaler la bonne réponse ou pas.

      Timer1.Start()
              Timer1.Interval = 2000
      
              'IndiceQuestionActuelle est uune variable globale qui permet à toute portion de code de savoir de quelle question on s'occupe à cet instant.
              ' Dans cette procédure (BResponse_Click), il s'agit de vérifier le bon choix du bouton (A, B, C et D) fait par l'utilisateur pour la question actuellemebt posée.
              ' Bref, il s'agit de savoir s'il a bien répondu à cette paire de questions et d'agir en conséquence (ici, ça se résume à changer la couleur des boutons).
              ' Marquage à l'écran des bonnes réponses faites. Si le bouton cliqué est celui de la bonne réponse, il devient Yellow, sinon il devient Gray
              ' Les boutons qui ne sont pas cliqués restent dans le couleur d'affichage de départ.
              If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Or
                  B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                  B.BackColor = Color.Green
              Else
                  B.BackColor = Color.Red
      
              End If
              ' Marquage dans le tableau des questions des bonnes réponses faites : la réponse (A ou B, et C ou D) est remplacée par OK si la réponse a été correcte
              ' Il est alors possible de relire le tableau (à faire ... ) en agissant selon que le RepOK1 vaut "OK" ou non, pour la question primaire
              ' et selon que le RepOK2 vaut "OK" ou non, pour la question secondaire
              Select Case B.Text
                  Case "A", "B"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK1 = "OK"
                      End If
                  Case "C", "D"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK2 = "OK"
                      End If
              End Select
      
              ' '' Il y a les Label des questions et des réponses : ils peuvent aussi être coloriés ...
              'LQuestion1.BackColor ...   et ForeColor aussi ...
              'LResponseA.BackColor ...
              'LResponseB.BackColor ...
              'LQuestion2.BackColor ...
              'LResponseC.BackColor ...
              'LResponseD.BackColor ..
              Timer1.Stop()
      



      après au bout de 2 secondes je n'arrive pas à trouver un lien qui les relie sur si je met dans le même bouton.
      0
    2. Utilisateur anonyme
       
      Sauf que là en abonnant les 2 méthodes au click des boutons elles vont s’exécuter « en même temps » ça va se jouer à quelques millisecondes et le résultat sera incertain.

      Donc je te répète ma question pourquoi tu as fait ça? Dans un but précis ou au petit bonheur la chance?
      0
    3. yannel777 Messages postés 161 Statut Membre 35
       
      Différencier les actions était pour moi la méthode la plus simple qu'associer les codes dans le même boutons (même fonction).

      voici le code entier:

      Private Sub BResponse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BResponseA.Click, BResponseB.Click, BResponseC.Click, BResponseD.Click
              Dim B As Button = CType(sender, Button)
              If B.ForeColor = Color.White And B.BackColor = Color.Green Then
                  B.ForeColor = Color.Black
                  B.BackColor = Color.Transparent
              Else
                  B.ForeColor = Color.White
                  B.BackColor = Color.Green
              End If
      
              Timer1.Start()
              Timer1.Interval = 2000
      
              'IndiceQuestionActuelle est uune variable globale qui permet à toute portion de code de savoir de quelle question on s'occupe à cet instant.
              ' Dans cette procédure (BResponse_Click), il s'agit de vérifier le bon choix du bouton (A, B, C et D) fait par l'utilisateur pour la question actuellemebt posée.
              ' Bref, il s'agit de savoir s'il a bien répondu à cette paire de questions et d'agir en conséquence (ici, ça se résume à changer la couleur des boutons).
              ' Marquage à l'écran des bonnes réponses faites. Si le bouton cliqué est celui de la bonne réponse, il devient Yellow, sinon il devient Gray
              ' Les boutons qui ne sont pas cliqués restent dans le couleur d'affichage de départ.
              If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Or
                  B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                  B.BackColor = Color.Green
              Else
                  B.BackColor = Color.Red
      
              End If
              ' Marquage dans le tableau des questions des bonnes réponses faites : la réponse (A ou B, et C ou D) est remplacée par OK si la réponse a été correcte
              ' Il est alors possible de relire le tableau (à faire ... ) en agissant selon que le RepOK1 vaut "OK" ou non, pour la question primaire
              ' et selon que le RepOK2 vaut "OK" ou non, pour la question secondaire
              Select Case B.Text
                  Case "A", "B"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK1 = "OK"
                      End If
                  Case "C", "D"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK2 = "OK"
                      End If
              End Select
      
              ' '' Il y a les Label des questions et des réponses : ils peuvent aussi être coloriés ...
              'LQuestion1.BackColor ...   et ForeColor aussi ...
              'LResponseA.BackColor ...
              'LResponseB.BackColor ...
              'LQuestion2.BackColor ...
              'LResponseC.BackColor ...
              'LResponseD.BackColor ..
              Timer1.Stop()
          End Sub




      Par contre il va directement à ce code là.

       'IndiceQuestionActuelle est uune variable globale qui permet à toute portion de code de savoir de quelle question on s'occupe à cet instant.
              ' Dans cette procédure (BResponse_Click), il s'agit de vérifier le bon choix du bouton (A, B, C et D) fait par l'utilisateur pour la question actuellemebt posée.
              ' Bref, il s'agit de savoir s'il a bien répondu à cette paire de questions et d'agir en conséquence (ici, ça se résume à changer la couleur des boutons).
              ' Marquage à l'écran des bonnes réponses faites. Si le bouton cliqué est celui de la bonne réponse, il devient Yellow, sinon il devient Gray
              ' Les boutons qui ne sont pas cliqués restent dans le couleur d'affichage de départ.
              If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Or
                  B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                  B.BackColor = Color.Green
              Else
                  B.BackColor = Color.Red
      
              End If
              ' Marquage dans le tableau des questions des bonnes réponses faites : la réponse (A ou B, et C ou D) est remplacée par OK si la réponse a été correcte
              ' Il est alors possible de relire le tableau (à faire ... ) en agissant selon que le RepOK1 vaut "OK" ou non, pour la question primaire
              ' et selon que le RepOK2 vaut "OK" ou non, pour la question secondaire
              Select Case B.Text
                  Case "A", "B"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK1 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK1 = "OK"
                      End If
                  Case "C", "D"
                      If B.Text = TableauDesQuestions(IndiceQuestionActuelle).RepOK2 Then
                          TableauDesQuestions(IndiceQuestionActuelle).RepOK2 = "OK"
                      End If
              End Select
      
              ' '' Il y a les Label des questions et des réponses : ils peuvent aussi être coloriés ...
              'LQuestion1.BackColor ...   et ForeColor aussi ...
              'LResponseA.BackColor ...
              'LResponseB.BackColor ...
              'LQuestion2.BackColor ...
              'LResponseC.BackColor ...
              'LResponseD.BackColor ..
              Timer1.Stop()
          End Sub


      sans passer par ce code là.

       Dim B As Button = CType(sender, Button)
              If B.ForeColor = Color.White And B.BackColor = Color.Green Then
                  B.ForeColor = Color.Black
                  B.BackColor = Color.Transparent
              Else
                  B.ForeColor = Color.White
                  B.BackColor = Color.Green
              End If
             


      c'est pour cela que je voulais placer un Timer de 2 sec pour bien différencier les action (test).
      0
    4. Utilisateur anonyme
       
      Par contre il va directement à ce code là.
      ...
      sans passer par ce code là.


      Alors je répète, encore une fois, ces 2 codes sont exécutés quasiment simultanément parce que tu les as abonnés tous les 2 au même événement. Et donc le résultat final dépend de qui est exécuté en premier et qui écrase le résultat précédent puisque exécuter quelques millisecondes après.
      0
    5. yannel777 Messages postés 161 Statut Membre 35
       
      donc je dois le mettre dans deux éventements différent? et mettre le timer dans ma première événement ?

      et que je dois mettre cette commande là dans le deuxième événement:

      Dim B As Button
      Private Sub AfficheReponseQuestion(ByVal sender As System.Object, ByVal e As System.EventArgs)
      B = CType(sender, Button)
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    En gros on en est là parce que
    • tu poses une question sur un forum, au message 3 après un petit éclaircissement je te propose une solution et toi, pour une raison qui m’échappe, tu fais totalement autre chose.
    • les 12 messages qui suivent sont un dialogue de sourd entee moi qui te demande pourquoi tu n’as pas essayé ce que je t’ai proposé et t’explique que ce tu as écrit n’est pas cohérent et toi qui démontre que tu n’as pas tout compris aux bases de vb.


    Je te propose donc deux choses et je m’arreterai ici:
    • relis le message 3, et essaye
    • laisse ton projet de côté quelques jours, le temps d’apprendre les bases de vb, par exemple avec le coirs de plassere https://plasserre.developpez.com/cours/vb-net/ il ne fera pas de toi une codeuse hors pair, ça il n’y a que le temps et la persévérance qui t’y mèneront, mais il comblera quelques trous dans tes fondations

    0
    1. yannel777 Messages postés 161 Statut Membre 35
       
      Oui, vous avez raison, je vais suive vos conseil :) en apprenant d'avantage :)
      désolé d'avoir fait perdre votre temps.

      cordialement.
      0
    2. Utilisateur anonyme
       
      C’est toi qui perd du temps, ce n’est pas sur un forum qu’on va t’expliquer de a à z le fonctionnement des événements.
      Il y a des cours pour ça.
      0