Problème avec le MouseDoubleClick (.NET)

Résolu
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006
-
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006
-
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

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006

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
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006

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"
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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.
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006

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
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006

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 ....
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Du coup j'apprend un truc.
Je teste avec vb.2005 demain au boulot. Si je vois une meilleure méthode, je la poste.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

A moins que ta question soit du vb.2003.
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

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 !!!
Messages postés
75
Date d'inscription
samedi 16 juin 2001
Statut
Membre
Dernière intervention
16 septembre 2006

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