IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

MouseEnter et MouseLeave en même temps


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 106
    Points
    106
    Par défaut MouseEnter et MouseLeave en même temps
    Bonjour,

    Voilà, j'ai un petit problème avec la façon dont sont gérés les évènements MouseEnter et MouseLeave. Mon but est de faire apparaître un genre de tooltip mais avec certaines particularités. Ce "ToolTip" est une form à part (frmToolTip) qui apparait la où le curseur est.

    Tout marche bien sauf en bordure du bouton. frmToolTip se met à "clignoter" passant d'un endroit à l'autre, comme si les deux event étaient lancés l'un après l'autre de manière infinie, comme si en bordure du bouton, c'était considéré comme un Enter et un Leave.

    J'ai essayer avec un code ne faisant que changer la couleur du bouton et le problème ne se présente pas...

    Merci de votre temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private UnToolTip As New frmToolTip
     
    Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
            'Apelle ShowTooltip avec la postion de la souris
            UnToolTip.ShowToolTip(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y, "Enter")
        End Sub
     
        Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
            'Le mettre à 0,0 pour les tests
            UnToolTip.ShowToolTip(0, 0, "Leave")
        End Sub
    La procédure ShowToolTip

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class frmToolTip
        Friend Sub ShowToolTip(ByVal x As Integer, ByVal y As Integer, ByVal Message As String)
            Me.Location = New Point(x, y)
     
            lblTexte.Text = Message
     
            Me.Visible = True
        End Sub
    End Class

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je comprends pas trop, on dirait que plutot que de le rendre invisible tu le déplaces...

    m'enfin il suffit de faire une tempo, par exemple, sur le mouseenter tu enregistres la date, et sur le mouseleave tu lances un timer toutes les 200ms vérifie si la date actuelle est supérieur à la date enregistrée de 2 secondes

    sachant que si tu as un autre mousenter dans la foulée, tu ré enregistres la date donc le timer ne fera rien, donc en bordure le tooltip s'affiche

    enfin là c'est dans les grandes lignes, faut mettre un peu de sécurité dans le code


    question subsidiaire, le framework contient un objet qui fait des tooltip, qui à mon avis ne bug pas comme le tiens, pourquoi alors le réécrire ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 106
    Points
    106
    Par défaut
    Merci de la réponse.

    Bien techniquement je suis supposé le faire disparaître oui. Dans l'exemple je le déplace pour mieux voir ce qui se passe.

    Pour ce qui est de la raison pourquoi je le réécrit, c'est que on va mettre des images éventuellement et que l'objet ToolTip du framework ne le permet pas.

    Ta solution fonctionne bien, mais reste que je comprends pas pourquoi ça fait ça...

    Techniquement, ça devrait faire la même chose avec le changement de couleur de bouton, pourtant non...

  4. #4
    Membre régulier Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 106
    Points
    106
    Par défaut
    Bon, je ne comprends toujours pas pourquoi le problème ne se présente pas lorsqu'on ne fait que changé la couleur du bouton. Mais j'ai décidé d'implanter l'idée de Sperot51 parce qu'elle a l'avantage de marcher.

    Donc maintenant cela ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Public Class frmToolTip
        Private ShowTime As Date
        Private ShowDelay As TimeSpan = New TimeSpan(200)
     
        Friend Sub ShowToolTip(ByVal x As Integer, ByVal y As Integer, ByVal Message As String)
            ShowTime = Now
     
            lblTexte.Text = Message
     
            Me.Location = New Point(x, y)
     
            Me.Visible = True
        End Sub
     
        Friend Sub HideToolTip()
            If Now > ShowTime.Add(ShowDelay) Then
                Me.Visible = False
            End If
        End Sub
    End Class
    ShowToolTip est appelé sur un MouseEnter et HideToolTip sur un MouseLeave

    Merci beaucoup Sperot51 pour ton aide!!!!!

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    C'est tout simplement parce que lorsque tu affiches la form, celle-ci "capture" la souris car tu l'affiches exactement à la position de la souris...

    Et la capture par la form déclenche le mouseleave sur le bouton.

    Essayes en ne plaçant pas ta form directement sous le curseur.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  6. #6
    Membre régulier Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 106
    Points
    106
    Par défaut
    Mais oui!!!!!!!!!!!!!!

    Le MouseLeave n'est pas lancé au changement de couleur parce que rien n'apparait sous le curseur.

    Ça fonctionne bien maintenant, j'ai ajouté un espacement de 5 pixel et hop plus de problèmes.

    Merci beaucoup olsimare!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tutoriel sur le BDE ? (et question en même temps!)
    Par Yomane dans le forum C++Builder
    Réponses: 7
    Dernier message: 18/02/2004, 17h39
  2. Que deux événements qui se passent en même temps.
    Par Melchisedec dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/08/2003, 14h24
  3. Lancer deux sons en même temps...
    Par Julien_riquelme dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 03/05/2003, 17h00
  4. 2 fonctions qui tournent en même temps
    Par GOUGOU1 dans le forum C
    Réponses: 7
    Dernier message: 07/12/2002, 18h42
  5. gérer le clic gauche-droite en même temps de la sou
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2002, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo