Problème avec le MouseDoubleClick (.NET)

Résolu
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006 - 14 sept. 2006 à 19:59
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006 - 15 sept. 2006 à 16:36
hello,

j'ai un problème en vb.net
Mon problème c'est que lorsque l'on fait un double clic sur un controle avec la souris,
ca déclenche d'abord l'évènement "MouseClick" et ensuite "MouseDoubleClick"
Mon problème c'est que je ne veux surtout pas qu'il execute le code du MouseClick quand je fais un doubleclic
J'ai pas trouvé de feinte pour arriver à mes fins

(pour info c'est pour gérer le simple clic et le double clic sur une icone dans la zone de notification en bas à droite(NotifyIcon))

Merci d'avance

15 réponses

Utilisateur anonyme
14 sept. 2006 à 22:16
Une solution que j'ai fini par trouvé,




Private

Declare

Function
GetDoubleClickTime
Lib

"user32"
()
As

UInteger

Private

Delegate

Sub
SimpleClickHandler()

Private
DblClickThread
As
System.Threading.Thread

Private
DblClick
As

Boolean
=
False

Private

Sub
WaitForDblClick()

  System.Threading.Thread.Sleep(GetDoubleClickTime())

  
MyBase
.Invoke(
New
SimpleClickHandler(
AddressOf
SimpleClick))

End

Sub

Private

Sub
SimpleClick()

  
If
DblClick =
False

Then

    
' ToDo Click

  
End

If

End

Sub

Private

Sub
TonNotifyIconOnMouseClick(
ByVal
Sender
As

Object
,
ByVal
 Args
As
System.Windows.Forms.MouseEventArgs)
Handles
TonNotifyIcon.MouseClick

  DblClick =
False

  
If

Not
DblClickThread
Is

Nothing

Then
DblClickThread.Abort()

  DblClickThread =
New
System.Threading.Thread(
AddressOf
WaitForDblClick)

  DblClickThread.Start()

End

Sub

Private

Sub
TonNotifyIconOnMouseDoubleClick(
ByVal
Sender
As
System.Object,
ByVal
 Args
As
System.Windows.Forms.MouseEventArgs)
Handles
TonNotifyIcon.MouseDoubleClick

  DblClick =
True

  
If

Not
DblClickThread
Is

Nothing

Then
DblClickThread.Abort()

  
' ToDo DblClick

End

Sub




Si ce que t'as trouvé à partire de ma premiere solution est mieux pourras tu me monter le code stp ?





Kenji
3
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006
14 sept. 2006 à 22:34
Voilà mon code qui marche
PrivateDeclareFunction GetTickCount Lib"kernel32" () AsUInteger

PrivateDeclareFunction GetDoubleClickTime Lib"user32"
() AsUInteger

Dim dblclicked AsBoolean = False
 <hr size="2" width="100%" />

PrivateSub
NotifyIcon_MouseClick(ByVal Sender AsObject, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles
NotifyIcon1.MouseClick

 

       Static
Count AsLong =
0

        dblclicked = False

        Count = GetTickCount()

 

        Do

            Application.DoEvents()

 

        LoopWhile GetTickCount() - Count < GetDoubleClickTime()

 

        If
dblclicked Then

            ' ToDo:
DblClick

        Else

            ' ToDo: Click

        EndIf

 

    EndSub

<hr size="2" width="100%" />

PrivateSub
NotifyIcon_MouseDoubleClick(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick

dblclicked = True

 

EndSub
3
Utilisateur anonyme
14 sept. 2006 à 20:43
Salut,

On utilise uniquement l'evenement MouseDown et on regarde le temps entre 2 cliques





Private

Declare

Function
GetTickCount
Lib

"kernel32"
()
As

UInteger

Private

Declare

Function
GetDoubleClickTime
Lib

"user32"
()
As

UInteger

Private

Sub
TonNotifyIconOnMouseDown(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)
Handles
TonNotifyIcon.MouseDown

  
Dim
DoubleClick
As

Boolean
=
False

  
Static
Count
As

Long
= 0

  
If
Count > 0
AndAlso
GetTickCount() - Count < GetDoubleClickTime()
Then
DoubleClick =
True

  Count = GetTickCount()

  
If
DoubleClick
Then

    
' ToDo: DblClick

  
Else

    
' ToDo: Click

  
End

If

End

Sub





Kenji
0
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006
14 sept. 2006 à 21:06
j'ai pas super compris comment ca marchait, mais une chose est sure ca ne marche pas.

quand tu fais un double clic, il passe 2 fois dans la procédure, la première dans le "Todo: Click" et la 2e fois dans le "Todo: DoubleClick"
0

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

Posez votre question
Utilisateur anonyme
14 sept. 2006 à 21:29
Ah mince quel idiot je fait. J'ai meme pas fait attention à ca alors que c'était le but. Je m'occupais que du double clique.




Kenji
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
14 sept. 2006 à 21:48
Salut, explication from Microsoft :
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.doubleclick.aspx

Voir la partie Remarks.


Je ne peut pas tester ce soir mais j'espère que ça t'aidera.
0
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006
14 sept. 2006 à 22:12
J'ai fini par trouver une solution grâce à l'aide de Kenji, mais par contre je sais pas comment écrire du code dans un message ...
j'ai beau chercher je vois pas
0
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006
14 sept. 2006 à 22:21
Ma solution est plus courte mais je sais pas si elle est mieux, par contre je sais pas comment mettre du code dans un message pour qu'il reconnaisse la syntaxe et qu'il colore les instructions ....
0
Utilisateur anonyme
14 sept. 2006 à 22:22
Dolphin Boy> J'ai esseyer avec la methode de ms :





MyBase
.SetStyle(ControlStyles.StandardClick,
True
)

MyBase
.SetStyle(ControlStyles.StandardDoubleClick,
True
)

MyBase
.UpdateStyles()



Ca ne change pas grands chose ; on as toujours le click avant le dblclick



Kenji
0
Utilisateur anonyme
14 sept. 2006 à 22:24
Il n'y as pas de coloration syntaxique automatiqe disponible sur le forum. Il faut que tu utilise un programe exterieur.
Mais si tu copie colle le code de vs, il copira aussi la coloration.



Kenji
0
Utilisateur anonyme
14 sept. 2006 à 22:40
C'est exactement du même style que le miens. J'avais pas pensé au DoEvents.
Ca donne exactement le même résultat.



Kenji
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
14 sept. 2006 à 23:09
Du coup j'apprend un truc.
Je teste avec vb.2005 demain au boulot. Si je vois une meilleure méthode, je la poste.
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
14 sept. 2006 à 23:12
A moins que ta question soit du vb.2003.
0
erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 avril 2018
15 sept. 2006 à 15:08
salut à tous !!!


une idée !!!


si  j'ai bien compris, tu a un evenement avec le click simple, puis un autre avec le doubleclick ?


Pourquoi ne pas utiliser le click droit et le click gauche ?


Chacun sa fonction !!! et ton pb est réglé au plus simple !!!


à plus !!!






Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
0
cs_Apophis Messages postés 75 Date d'inscription samedi 16 juin 2001 Statut Membre Dernière intervention 16 septembre 2006
15 sept. 2006 à 16:36
Parce que j'ai également besoin du clic droit :D

J'ai besoin de trois évènements:
- click gauche
- doubleclick gauche
- click droit

Mais bon, avec la solution de Kenji ca marche même si c'est un peu compliqué, mais je crois qu'il n'y a pas trop le choix.
Je trouve ca quand même bizarre que Microsoft n'ait pas permis de gérer ce cas plus simplement
0
Rejoignez-nous