none
Mouseclick sans effet RRS feed

  • Question

  • Bonjour

    Dans un formulaire, je n'arrive pas à faire une interruption avec "Form1_MouseClick".

    Le click de souris n'a aucun effet sur mes contrôles (boutons de commande); sauf si la propriété du bouton est "Enable=false", mais celle-ci me met mes boutons en "grisé".


    Alain D
    • Modifié papyx mercredi 28 décembre 2011 12:11
    mercredi 28 décembre 2011 10:55

Réponses

  • Bonjour,

    Ou utiliser la même approche que l'autre fois par exemple avec 3 boutons Button1, Button2, Button3 sur le formulaire :

        Dim Boutons(2) As Button
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            For i = 0 To UBound(Boutons)
                Boutons(i) = CType(Me.Controls.Find("Button" & i + 1, False)(0), Button)
                AddHandler Boutons(i).Click, AddressOf btn_Click
            Next
            Timer1.Start()
        End Sub
        Private Sub btn_Click(sender As System.Object, e As System.EventArgs)
            MsgBox(CType(sender, Button).Name & " a été pressé.")
        End Sub
    


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse papyx jeudi 29 décembre 2011 10:56
    mercredi 28 décembre 2011 20:49
    Modérateur

Toutes les réponses

  • Bonjour Alain,

    Vous parlez de la procédure Form1_MouseClick() qui, comme son nom l'indique, gère l'évènement MouseClick reçu sur le formulaire.

    Les évènements liés aux contrôles ne font pas partie de cette procédure. Si le contrôle est désactivé, c'est comme si vous cliquiez à travers celui-ci, donc directement sur le formulaire.

    Pour recevoir l'évènement Click sur le bouton, double-cliquez dessus à partir de la fenêtre Design, et vous serez amené à l'endroit dans le code correspondant à Button1_Click.

    Afin d'être sûr de comprendre vos démarches, merci de détailler au mieux vos soucis ou ce que vous souhaitez faire.

    Bonne journée.

     

     


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    mercredi 28 décembre 2011 12:57
  • j'ai une série de boutons et je ne veux pas avoir autant de procédures qu'il y-a de boutons.

    En VB6, je pouvais intercepter l’évènement avec  "Form1_MouseMove", mais avec Visual Studio cela ne réagit pas de la même manière.

    Le but est d'avoir une interruption lorsque je clique sur un bouton de commande. 


    Alain D
    mercredi 28 décembre 2011 13:35
  • Bonjour,

    Mais le "MOUSE" concerne uniquement l'objet, la form étant aussi un objet, si l'évènement est prévu pour un objet, en survolant un autre objet ça ne va pas répondre, tout dépend si l'évènement est pour la form ou pour les boutons... Parce que tu écris ... lorsque je clique sur un bouton de commnde... , or là, ton form1_MouseDown/click est pour la form, pas pour les boutons... comme l'indique Michel..., en plus si l'évènement concerne sa propre form, je crois que si tu mets le nom de la form ça ne marchera pas, faut mettre "ME."

    En vbNet on ne peut pas indicer des objets comme en vb6, hélas, alors il faut tous les écrire ou encore les indicer avec le code.

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 28 décembre 2011 15:20
  • D'accord, mais alors comment avoir une interruption après appui sur un bouton de commande, afin d'exécuter une action?
    Alain D
    mercredi 28 décembre 2011 15:32
  • Papy, suite...

    Ben en fait c'est comme en vb6 sur le principe, en utilisant la procédure évènementielle CLICK du bouton désiré.

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 28 décembre 2011 15:36
  • Ca, je sais le faire; mais j'ai toute une série de boutons et je voudrais une seule procédure pour réaliser les actions.
    Alain D
    mercredi 28 décembre 2011 15:44
  • Bonsoir, Alain,

    Ce type de procédure a déjà été traité sur le forum : il suffit de faire une seule procédure qui intercepte les évènements de tous les boutons et de récupérer ensuite le bouton qui a été cliqué.

     

        Sub IntercepterTout(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            Select Case sender.Name
                Case "Button1"
                    'Exécuter une action pour le click sur Button1
                Case "Button2"
                    'Exécuter une action pour le click sur Button2
                Case "Button3"
                    'Exécuter une action pour le click sur Button3
            End Select
        End Sub
    


     

     


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    • Modifié Michel K mercredi 28 décembre 2011 16:33
    • Proposé comme réponse Ould MouradEditor mercredi 28 décembre 2011 16:34
    mercredi 28 décembre 2011 16:32
  • c'est intéressant, mais cela oblige à mettre tous les boutons dans "Handles".

    Cela m'ennuie quand même.


    Alain D
    mercredi 28 décembre 2011 16:43
  • Affirmatif, et encore là ils ne sont pas indicés, tu ne peux pas faire "boutton(i)", sinon faut écrire touts les boutons dans une liste à cet effet, puis on utilise l'indice de cette dernière.

    Avec vbNet il faut aimer écrire :o)))

    Cordialement.

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 28 décembre 2011 16:48
  • Ce qui me surprend c'est que je peux réaliser cette interruption avec une version ancienne de Basic et avec ces versions plus récentes, les choses deviennent plus compliquées...

    En principe "qui peut le plus peut le moins".


    Alain D
    mercredi 28 décembre 2011 17:17
  • Si vous ne souhaitez pas écrire tous les "Handles" il va peut-être falloir repenser à l'organisation de votre formulaire/projet qui peut être la source du problème.
    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    mercredi 28 décembre 2011 20:41
  • Ah mais Papy, je suis de ton avis, je trouve que vbNet est une régression colossale de la programmation.

    Certes il a suivi la technologie, certes il y a quelques améliorations comme l'uniformisation des noms (objet et propriété), l'éditeur... mais pour le reste de mon point de vue c'est dramatique. Il faut sans doute remonter à vb3, avant 1975 je crois, et encore, après on pouvait indicer un objet(i), ça veut dire que vbNet a reculé de quasiment 20 ans en arrière. C'est simple, il est deux fois plus compliqué que vb6, il est quatre fois plus long à écrire et ses exécutables vont à la même vitese que vb6.

    Moi, quand j'ai vu vbNet, je me suis dit "chouette une amélioration", on va pouvoir encore mieux indicer les objets, au lieu de pouvoir faire o(i), on va pouvoir faire o(i, j), formidable ! Ben je suis tombé de haut...

    Dans le passé MST s'est planté plusieurs fois (win93 (3.11)), win2000, il n'est pas impossible que dans quelques année ils reviennent en arrière, tout dépend en fait de ce que ça va rapporter, car de nombreux développeurs sous vb6 ont laissé tomber vbNet, ce n'est pas mon cas parce qu'il est incorporé dans le paiement de l'OS, mais il ne faut pas croire que j'aime, je m'habitue simplement en subissant...

    Actuellement on programme comme on programmait en 1980 en TC3++, il faut de nouveau écrire les classes, un quart de siècle en arrière, c'est ça le progrès, bientôt on programmera en hexadécimal, et peut être qui'on finira par programmer en binaire, le retour aux sources...

    Cordialement, Joe.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 28 décembre 2011 20:49
  • Bonjour,

    Ou utiliser la même approche que l'autre fois par exemple avec 3 boutons Button1, Button2, Button3 sur le formulaire :

        Dim Boutons(2) As Button
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            For i = 0 To UBound(Boutons)
                Boutons(i) = CType(Me.Controls.Find("Button" & i + 1, False)(0), Button)
                AddHandler Boutons(i).Click, AddressOf btn_Click
            Next
            Timer1.Start()
        End Sub
        Private Sub btn_Click(sender As System.Object, e As System.EventArgs)
            MsgBox(CType(sender, Button).Name & " a été pressé.")
        End Sub
    


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse papyx jeudi 29 décembre 2011 10:56
    mercredi 28 décembre 2011 20:49
    Modérateur
  • Bonjour,

    Ou utiliser la même approche que l'autre fois ...

    Boutons(i) = CType(Me.Controls.Find("Button" & i + 1, False)(0), Button)
    AddHandler Boutons(i).Click, AddressOf btn_Click

    ...

    Bonsoir Patrice,

    Désolé, mais c'est plus simple que ça vb6

    Dim i as long ' global
    Button1(i)
    
    


    Tu remarqueras une petite différence entre les deux codes, l'un est simple est clair, l'autre on dirait une incantation mystique :o)))

    Boutons(i) = CType(Me.Controls.Find("Button" & i + 1, False)(0), Button)
    AddHandler Boutons(i).Click, AddressOf btn_Click
    
    

    Là je ne comprends que la moitié de ce que tu écris, et encore, le vbNet est au moins deux fois plus compliqué que le vb6

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 28 décembre 2011 21:04
  • bonjour

    Je vois que certains d'entre vous sont de mon avis.

    C'est la solution de Patrice (toujours lui) que j'attendais.

    Mais j'avoue que ce n'est pas évident, il faut bien maîtriser pour y parvenir.

    Encore merci Patrice.


    Alain D
    jeudi 29 décembre 2011 10:56
  • Bonjour Papy,

     

    Voici un petit exemple vbNet, non testé mais qui devrait marcher (issu de mon pense-bête) :

     

    Sub Load…
     Dim monObj As New Collection() ' débute … 1 (monObj)
     monObj.Add(Me.Button1) ' monObj(i) indice les objets
     monObj.Add(Me.Button2)
     monObj.Add(Me.Button3)
     Dim i As Integer
     For i = 1 To 3 ' test donnant un nom aux boutons
      Select Case i
       Case 1 : monObj(i).Text = "un"
       Case 2 : monObj(i).Text = "deux"
       Case 3 : monObj(i).Text = "trois"
      End Select
     Next i
    End Sub
    
    Sub monObj_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click, Button 2.Click, Button 3.Click
     Dim i As Integer
     For i = 1 To monObj.Count
      If monObj.Item(i).Name = sender.Name Then Exit For
     Next i
     MsgBox("index de l'objet = " & i)
     monObj(i)…. ' pour tavailler avec
    End Sub
    

     

     

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

     

     

    • Modifié EhJoe jeudi 29 décembre 2011 11:22 ajustement code
    jeudi 29 décembre 2011 11:17
  • Merci Ehjoe

    j'essaierai à la prochaine occasion.

    Bonne journée.

    AD


    Alain D
    jeudi 29 décembre 2011 12:13
  • La différence est que VB6 comporte des fonctions spécifiques pour les tableaux de contrôle.

    En .NET (VB mais aussi C#), le principe est qu'un tableau de contrôle est un tableau comme n'importe quel autre tableau. Si le nombre de contrôles n'est pas trop grand, il est possible aussi de créer le tableau de cette façon :

    Dim Buttons() As Button={Button1,Button2,Button3}

    Une autre approche selon le but de ce tableau de contrôles est de les créer dynamiquement éventuellement en utilisant http://msdn.microsoft.com/fr-fr/library/microsoft.visualbasic.powerpacks.datarepeater.aspx.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 29 décembre 2011 12:27
    Modérateur
  • OK, bon à savoir.

    à+


    Alain D
    jeudi 29 décembre 2011 15:45
  • Bonjour ehjoe

    je viens d'essayer ton exemple et je rencontre un problème avec l'objet collection (monobj):

    le control bouton, au moment du "add" me met une valeur booléenne à faux.

    C'est la 1ère fois que j'utilise l'objet "Collection" et ne suis pas très à l'aise avec celui-ci.

     


    Alain D
    jeudi 19 janvier 2012 12:04