Meilleur auteur de réponses
Mouseclick sans effet

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
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
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 -
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 -
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 -
-
-
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
-
-
-
-
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 -
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 -
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
-
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 -
-
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
-
-
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". -
-
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