Simuler les évenements d'un bouton

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 8 janv. 2013 à 19:54
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 10 janv. 2013 à 21:32
Bonjour
j'ai un bouton button1
avec les évenements suivants
Private Sub button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles button1.MouseDown
        button1.BackgroundImage = Image.FromFile(Application.StartupPath & "\auxillary\button1.png")
        
    End Sub

    Private Sub button1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles button1.MouseUp
        button1.BackgroundImage = Image.FromFile(Application.StartupPath & "\auxillary\button1a.png")
End Sub


comment simuler le button1_MouseDown
button1_Mouseup

Merci

15 réponses

ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
8 janv. 2013 à 21:55
Bonjour,

Simuler, si j'ai compris :


Call button1_MouseDown(Sender, e)
Call button1_MouseUp(Sender, e)



Cordialement, Joe.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 janv. 2013 à 22:24
Bonjour

cela ne marche pas

simuler je veux dire comme ci que l'ordinateur
cliquait le bouton
0
Utilisateur anonyme
8 janv. 2013 à 22:55
Bonjour,

Je ne sais pas si j'ai bien compris la question.
Button1.performclick peut-être ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 janv. 2013 à 23:26
Bonjour banana32

je vais tenter d'expliquer
sur la form un bouton
quand je lance le prog je peux avec la souris
déclencher le mouseup et le mousedown du bouton
je voudrais déclencher les évenement automatiquement c'est à dire voir que le
bouton reste appuyé ou relevé

quand j'appuie sur le bouton j'affiche une
image de bouton appuyé et aussi une liste
de nombre aléatoire avec un timer
tant que le bouton est appuyé les nombres
défile au relevé du bouton je stop le timer
simuler le tout
j'espère etre clair enfin
0

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

Posez votre question
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
9 janv. 2013 à 00:29
Suite...



quand je lance le prog je peux avec la souris
déclencher le mouseup et le mousedown du bouton



Ben alors le code que je t'ai indiqué est bon, tu mets ça dans le Load et ça va simuler un appui (simuler un appui signifie : produire le même résultat, ça ne signifie pas afficher l'appui du bouton).

*

Mais... pourquoi tu mets des bouton si c'est pour simuler leur appui.
Si tu mets des boutons c'est pour appuyer dessus, enfin, je ne suis pas spécialiste en psychisme mais...


Codialement, Joe.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 janv. 2013 à 01:04
Si tu mets des boutons c'est pour appuyer dessus


bien sur
suppose que c'est un jeu contre l'ordinateur
chacun doit appuyer sur un bouton
comment l'ordi va appuyer sur le bouton
bien sur je peux appeler le code du mousedown
mais dans ce cas je ne vois pas que le bouton
est appuyé ou relevé

possible que c'est assez compliqué car il faudrait aussi faire déplacer la souris et
montrer la souris appuyant le bouton

je vais contourner le problème
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 janv. 2013 à 08:27
Bonjour, ShayW
l'aspect appuyé d'un bouton devrait pouvoir être alors rendu comme sous vb6, à savoir en donnant le focus à ce bouton
Setcursorpos règlerait quant ) lui le problème du déplacement de la souris

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
9 janv. 2013 à 09:36
Suite...

En complément de ce que dit ucFoutu (que je salue au passage), donner le focus va montrer que le bouton à la main, mais je ne crois pas qu'il va simuler un enfoncement.
Pour faire ça, et sauf si on proposait mieux, je mets deux images du bouton, que je change pour simuler l'appui.

Encore une fois tu viens avec une mise en place sans consulter personne, puis ne sachant pas faire tourner ta mise en place, tu demandes que les autres le fassent, pourquoi pas ; mais il faudrait peut être commencer par demander ce qui est le mieux dans ce que tu veux faire, et faire ta mise en place seulement d'après les réponses car :

En règle générale, quand on simule un jeu humain machine, on ne fait pas jouer la machine comme un humain.
- Quand c'est à l'humain de jouer, on lui affiche les commandes de jeu et on indique que c'est à lui (un flèche, un message), puis quand c'est à la machine de jouer on efface ou bloque les commandes de l'humain et on indique que c'est la machine qui joue (voir ci-dessus).
Mais on ne balade pas le curseur de la souris, ce n'est pas un didacticiel animé !

Cordialement, Joe.
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
9 janv. 2013 à 14:10
Salut a tous,

Je pense que l'essentiel a ete dit, mais juste une idee suplementaire: le Toggle Button (qu'on trouve en VBA) doit surement exister en VBnet.
Si toutefois je suis sur la meme longueur d'onde avec ta question.

A+
JLuc01
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2013 à 14:53
Bonjour,

Il n'existe pas de Toggle Button en VB.Net , mais on peut le remplacer par ceci:

  Private Sub move_button()
        If Button1.Text = "appuyer" Then
            Button1.Text = "relever"
        Else
            Button1.Text = "appuyer"
        End If
    End Sub


Si c'est ce que tu recherches!

@+ Le Pivert
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
10 janv. 2013 à 17:20
Bonjour à tous,

Désolé d'enfoncer le clou, mais voici une petite parade pour afficher le bouton avec en rendu enfoncé par code.

Dans cet exemple, le timer simule un MouseDown sur Button1 toutes les X secondes.

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick

        'Simule un bouton de sourie gauche
        Dim d As New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0)
        Button1_MouseDown(sender, d)

    End Sub

    Private Sub Button1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown

        'Test si l'évènement est une simulation
        'dans l'exemple j'ai considéré que si le sender n'est pas le bouton lui-même, c'est une simulation
        Dim simulDown As Boolean = (sender Is Nothing) OrElse (Not TypeOf sender Is Button) OrElse (CType(sender, Button).Name <> "Button1")

        'Si c'est une simulation, on redessine le bouton avec un style enfoncé
        '(Attention, il faudra adapter si le bouton à une image)
        If simulDown Then
            ButtonRenderer.DrawButton(System.Drawing.Graphics.FromHwnd(Button1.Handle), New Rectangle(0, 0, Button1.Width, Button1.Height), Button1.Text, CType(Button1.Font.Clone, Font), True, VisualStyles.PushButtonState.Pressed)
        End If

        'Ici on place l'action à effectuer
        Console.WriteLine("Button1_MouseDown")

        'Si c'est une simulation, on simule le bouton de sourie relaché
        If simulDown Then
            Threading.Thread.Sleep(1000) 'J'ai volontairement fait une petite pause pour que l'utilisateur ai le temps de voir
            Button1_MouseUp(sender, e)
        End If

    End Sub

    Private Sub Button1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp

        'Test si l'évènement est une simulation
        'dans l'exemple j'ai considéré que si le sender n'est pas le bouton lui-même, c'est une simulation
        Dim simulUp As Boolean = (sender Is Nothing) OrElse (Not TypeOf sender Is Button) OrElse (CType(sender, Button).Name <> "Button1")

        'Ici on place l'action à effectuer
        Console.WriteLine("Button1_MouseUp")

        'Si c'est une simulation, on force le bouton à se redessiner
        If simulUp Then
            Me.Button1.Invalidate()
        End If

    End Sub
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
10 janv. 2013 à 18:09
Et pour être plus précis par rapport à cette remarque
quand j'appuie sur le bouton j'affiche une
image de bouton appuyé et aussi une liste
de nombre aléatoire avec un timer
tant que le bouton est appuyé les nombres
défile au relevé du bouton je stop le timer
simuler le tout
j'espère etre clair enfin


Vous pouvez vous en sortir avec un timer qui démarre sur MouseDown simulé et qui simule un MouseUp une fois écoulé, exemple :
Private rnd As New Random

    'Timer qui effectue une action tant que le bouton est appuyé
    Private Sub TimerAction_Tick(sender As System.Object, e As System.EventArgs) Handles TimerAction.Tick

        Me.Label1.Text = Now.Second & ":" & Now.Millisecond.ToString

    End Sub

    'Timer qui simule un appui toutes les x secondes (juste pour exemple)
    Private Sub TimerSimul_Tick(sender As System.Object, e As System.EventArgs) Handles TimerSimul.Tick

        Dim args As New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0)
        Button1_MouseDown(sender, args)

    End Sub

    'Timer lancé lors d'un MouseDown simulé
    Private Sub TimerDown_Tick(sender As Object, e As System.EventArgs) Handles TimerDown.Tick

        'Arrête le timer
        Me.TimerDown.Stop()

        'Simule le bouton de sourie relaché
        Dim args As New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0)
        Button1_MouseUp(sender, args)

    End Sub

    Private Sub Button1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown

        'Test si l'évènement est une simulation
        'dans l'exemple j'ai considéré que si le sender n'est pas le bouton lui-même, c'est une simulation
        Dim simulDown As Boolean = (sender Is Nothing) OrElse (Not TypeOf sender Is Button) OrElse (CType(sender, Button).Name <> "Button1")

        'Change l'image de fond
        Me.Button1.BackgroundImage = Image.FromFile("...")

        'Démarre l'action du bouton enfoncé
        Me.TimerAction.Start()

        'Si c'est une simulation
        If simulDown Then

            'Calcul un temps de bouton enfoncé aléatoire entre 2 et 5 secondes
            Dim tempsSimul As Integer = rnd.Next(2000, 5000)

            'Modifie le délai du timer de bouton appuyé
            Me.TimerDown.Interval = tempsSimul

            'Démarre le timer
            Me.TimerDown.Start()

        End If

    End Sub

    Private Sub Button1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
     
        'Arrête le timer d'action sur bouton appuyé
        Me.TimerAction.Stop()

        'Modifie l'image du bouton
        Me.Button1.BackgroundImage = Image.FromFile("...")

    End Sub
0
Utilisateur anonyme
10 janv. 2013 à 20:20
Maintenant promis, j'arrête ...

Dommage, j'attendais la suite
J'en apprends aussi grâce à tes posts. Merci et meilleurs voeux foliv57.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 janv. 2013 à 21:32
Merci Foliv57

il va falloir que j'étudie tout le paquet
doucement et surrement
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
10 janv. 2013 à 20:09
Toujours fidèle à moi-même avec mes multiples postes d'affilés, je me suis aperçus par hasard qu'en utilisant une dérivée de la classe Button et en appelant la méthode OnMouseDown, le controle génère bien l'évènement (normal) mais permet aussi de modifier l'état d'affichage du bouton (enfoncé/relâché).

Donc voici la petite classe :
Public Class ButtonCorr
    Inherits Button

    Private _isSimulated As Boolean
    Private WithEvents _downTimer As Timers.Timer
    Private Delegate Sub OnMouseUpDelegate(ByVal e As MouseEventArgs)

    Public Sub New()
        'Création du timer de simulation appuyé
        _downTimer = New Timers.Timer()
        _downTimer.AutoReset = False
    End Sub

    Public ReadOnly Property IsSimulated As Boolean
        Get
            Return _isSimulated
        End Get
    End Property

    'Simule un click
    Public Sub SimulateClick(ByVal time As Long)

        _isSimulated = True

        'Lance le mouse down du bouton
        Me.OnMouseDown(New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0))

        'Lance le timer de simulation pour attendre le temps demandé en paramètre
        _downTimer.Interval = time
        _downTimer.Start()

    End Sub

    'Fin de la simulation
    Private Sub FinDown(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles _downTimer.Elapsed

        'Lance le mouse up du bouton
        Me.Invoke(New OnMouseUpDelegate(AddressOf Me.OnMouseUp), New Object() {New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0)})
        _isSimulated = False

    End Sub

End Class


Avec ça, vous n'avez plus qu'à remplacer vos Button par des ButtonCorr et à appeler SimulateClick pour simuler un MouseDown/MouseUp.

Maintenant promis, j'arrête ...
-2
Rejoignez-nous