Simuler les évenements d'un bouton [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 janv. 2013 à 19:54 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

15 réponses

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

Simuler, si j'ai compris :


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



Cordialement, Joe.
Commenter la réponse de ehjoe
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 janv. 2013 à 22:24
0
Merci
Bonjour

cela ne marche pas

simuler je veux dire comme ci que l'ordinateur
cliquait le bouton
Commenter la réponse de cs_ShayW
Utilisateur anonyme - 8 janv. 2013 à 22:55
0
Merci
Bonjour,

Je ne sais pas si j'ai bien compris la question.
Button1.performclick peut-être ?
Commenter la réponse de Utilisateur anonyme
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 janv. 2013 à 23:26
0
Merci
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
Commenter la réponse de cs_ShayW
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 9 janv. 2013 à 00:29
0
Merci
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.
Commenter la réponse de ehjoe
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 9 janv. 2013 à 01:04
0
Merci
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
Commenter la réponse de cs_ShayW
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 9 janv. 2013 à 08:27
0
Merci
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.
Commenter la réponse de ucfoutu
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 9 janv. 2013 à 09:36
0
Merci
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.
Commenter la réponse de ehjoe
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 9 janv. 2013 à 14:10
0
Merci
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
Commenter la réponse de cs_JLuc01
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 9 janv. 2013 à 14:53
0
Merci
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
Commenter la réponse de cs_Le Pivert
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 10 janv. 2013 à 17:20
0
Merci
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
Commenter la réponse de foliv57
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 10 janv. 2013 à 18:09
0
Merci
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
Commenter la réponse de foliv57
Utilisateur anonyme - 10 janv. 2013 à 20:20
0
Merci
Maintenant promis, j'arrête ...

Dommage, j'attendais la suite
J'en apprends aussi grâce à tes posts. Merci et meilleurs voeux foliv57.
Commenter la réponse de Utilisateur anonyme
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 10 janv. 2013 à 21:32
0
Merci
Merci Foliv57

il va falloir que j'étudie tout le paquet
doucement et surrement
Commenter la réponse de cs_ShayW
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 10 janv. 2013 à 20:09
-2
Merci
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 ...
Commenter la réponse de foliv57

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.