none
Attendre un évènement RRS feed

  • Question

  • Bonjour, j'ai une petite question, comment fait-on pour attendre un évènement, un clique sur un bouton pour ma part.

    Dans mon cas, mon programme fait appel à une 2ème form, dans cette 2ème form, j'ai 3 radiobutton et un bouton. J'aimerai que mon programme s’arrête sur cette fenêtre et je puisse choisir une valeur parmi les 3 radiobutton et valider en appuyant sur le bouton, or ici le programme zappe toute cette démarche et prend la valeur du premier radiobutton sans que j'ai validé.

    Avez-vous une solution?



    Cordialement, maxkun ;)

    mercredi 13 juin 2012 11:53

Réponses

  • Le 13/06/2012 14:46, maxkun a écrit :
    > Et bien je fais pourtant appel a ma form avec la méthode show().
    >
    > Voici le code de ma première form :
    >
    > Public Class Form1
    >
    >      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    >          Form2.show()
    >      End Sub
    >
    >   End Class
    >
    >
    > Donc cela charge bien ma form2, mais ça n'attend pas que je valide en
    > cliquant sur le bouton, voici le code de ma 2ème form :
    >
    > Public Class Form2
    >      Dim decision_joueur As Integer
    >
    >      Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    >
    >      End Sub
    >
    >      Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
    >          If Attaque.Checked = True Then decision_joueur = 1
    >          If Défense.Checked = True Then decision_joueur = 2
    >          If Potion.Checked = True Then decision_joueur = 3
    >          Me.Close()
    >      End Sub
    > End Class
    >
    >
    >
     
    Tu fais appel à Form2.Show() dans l'événement Load, Form1 n'est pas
    encore affiché, il poursuit donc immédiatement son code. Une manière
    de rester sur Form2 est de l'afficher avec Form2.ShowDialog() qui
    bloquera l’exécution du code de Form1 jusqu'à la fermeture de Form2.
     
    Mais il y a peut être un problème d'agencement à revoir ?
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    • Marqué comme réponse maxkun mercredi 13 juin 2012 13:53
    mercredi 13 juin 2012 13:35

Toutes les réponses

  • Bonjour,

    Le principe est faire un MaForm.Show ce qui affiche le formulaire. Il attend ensuite qu'une entrée ait lieu ce qui donne lieu à un évènement que l'on traite (par exemple exécution de la procédure btnValidation_Click lorsque l'utilisateur clique sur un bouton appelé btnValidation).

    Je dirais actuellement soit le formulaire n'est pas affiché correctement soit le code qui recupère la valeur saisie n'est pas dans le bon évènement. Difficile d'en dire plus sans voir le code (juste le minimum nécessaire pour montrer ce comportement précis).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 13 juin 2012 12:37
    Modérateur
  • Et bien je fais pourtant appel a ma form avec la méthode show().

    Voici le code de ma première form :

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load      
            Form2.show()
        End Sub
    
     End Class

    Donc cela charge bien ma form2, mais ça n'attend pas que je valide en cliquant sur le bouton, voici le code de ma 2ème form : 

    Public Class Form2
        Dim decision_joueur As Integer
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
            If Attaque.Checked = True Then decision_joueur = 1
            If Défense.Checked = True Then decision_joueur = 2
            If Potion.Checked = True Then decision_joueur = 3
            Me.Close()
        End Sub
    End Class



    Cordialement, maxkun ;)

    mercredi 13 juin 2012 12:46
  • Cela devrait être ok. Form2 doit s'afficher et normalement le code présent dans Ok_Click ne s'exécutera que si vous cliquez sur le bouton Ok (mettre un point d'arrêt).

    Si vous voulez dire qu'il ne doit pas non plus être possible de faire quoi que ce soit dans Form1, voir ShowDialog au lieu de Show...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Proposé comme réponse Jacques93 mercredi 13 juin 2012 13:46
    mercredi 13 juin 2012 13:32
    Modérateur
  • Le 13/06/2012 14:46, maxkun a écrit :
    > Et bien je fais pourtant appel a ma form avec la méthode show().
    >
    > Voici le code de ma première form :
    >
    > Public Class Form1
    >
    >      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    >          Form2.show()
    >      End Sub
    >
    >   End Class
    >
    >
    > Donc cela charge bien ma form2, mais ça n'attend pas que je valide en
    > cliquant sur le bouton, voici le code de ma 2ème form :
    >
    > Public Class Form2
    >      Dim decision_joueur As Integer
    >
    >      Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    >
    >      End Sub
    >
    >      Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
    >          If Attaque.Checked = True Then decision_joueur = 1
    >          If Défense.Checked = True Then decision_joueur = 2
    >          If Potion.Checked = True Then decision_joueur = 3
    >          Me.Close()
    >      End Sub
    > End Class
    >
    >
    >
     
    Tu fais appel à Form2.Show() dans l'événement Load, Form1 n'est pas
    encore affiché, il poursuit donc immédiatement son code. Une manière
    de rester sur Form2 est de l'afficher avec Form2.ShowDialog() qui
    bloquera l’exécution du code de Form1 jusqu'à la fermeture de Form2.
     
    Mais il y a peut être un problème d'agencement à revoir ?
     
    --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    • Marqué comme réponse maxkun mercredi 13 juin 2012 13:53
    mercredi 13 juin 2012 13:35
  • Et bien avec la méthode showdialog cela fonctionne comme il faut.

    Merci à vous.


    Cordialement, maxkun ;)

    mercredi 13 juin 2012 13:54
  • Ok pour être complet, Show ne "zappe" absolument rien. Le formulaire Form2 attend toujours que l'on clique sur le bouton ok pour exécuter le code correspondant. Par contre le code de Form1 continue à s'exécuter tout de suite après le Show et donc si ce code s'attends à utiliser qq chose définie par Form2, on n'aura toujours effectivement que la valeur initiale, cette valeur n'ayant pas encore été modifiée depuis Form2.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 13 juin 2012 14:03
    Modérateur