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 :

Evénement MouseMove avec Click Gauche


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Evénement MouseMove avec Click Gauche
    Bonjour,

    J'ai un certain nombre de controls dans un panel, et je souhaiterai pouvoir invoquer une méthode sur chaque control lorsque je passe dessus en gardant le click gauche appuyé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void light_MouseMove(object sender, MouseEventArgs e)
    {
    Light light = (Light)Sender;
    if(e.Button == MouseButtons.Left)
    light.Enable();
    }
    En procédant ainsi, le click n'est pas détecté si il est déjà appuyé.

    Y'a t'il une solution simple ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Juin 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 130
    Points : 115
    Points
    115
    Par défaut
    Bonjour,

    moi ce que je ferais, s'est à l'évènement clic gauche tu regarde la position du curseur et tu compare avec les positions de tes controls.

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    une solution simple :

    Regarder dans les evenements MouseMove de chaque control l'état de la souris

    The Monz, Toulouse

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par OLman135 Voir le message
    Bonjour,

    moi ce que je ferais, s'est à l'évènement clic gauche tu regarde la position du curseur et tu compare avec les positions de tes controls.
    J'ai effectivement essayé cette solution, mais le problème est le même, lorsque le bouton est déjà cliqué il ne se passe rien.

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    une solution

    Tu fais dans le mousemove , un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (!button1.ClientRectangle.Contains(e.Location))
                {
                    label1.Text = "Outside the control";
                    label1.Focus();
                }
    Dans l'exemple, j'ai fait 4 boutons... et sur le mouseMove, je gère le fait
    que si je sors en dehors des limites de mon controle, je file le focus à quelqu'un d'autre.

    C'est juste un exemple, mais bon, ca peut te donner des pistes déja !

    A priori, en faisant cela, tu auras le mouse Move qui sera levé sur les autres controles ensuite....

    Et l'état du bouton sera correcte

    voila

    Résolu ou presque ?

    The Monz, Toulouse

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Merci de ta réponse, j'ai essayé mais sans résultats, en restant clicker les autre contrôles ne s'activent pas. J'ai peut être mal interprété.

    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
     
    void light_MouseMove(object sender, MouseEventArgs e)
    {
        Light light = (Light)sender;
     
        if(e.Button == MouseButtons.Left)
       {
            light.Enable();
       }
     
       if(!light.ClientRectangle.Contains(e.Location))
       {
           label1.Focus();
       }
     
    }

  7. #7
    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 777
    Points
    1 777
    Par défaut
    Bonjour.

    Comme le mousemove dans le control n'est levé que si le curseur de la souris est sur le control, tester la présence dans la zone client me semble un peu redondant.

    Pour rappel (MSDN) :
    Les événements de souris se produisent dans l'ordre suivant :
    MouseEnter
    MouseMove
    MouseHover / MouseDown / MouseWheel
    MouseUp
    MouseLeave

    Donc une gestion du MouseLeave peut-être ?

    Toutefois, cabler cela sur chaque control est assez lourd, je te conseillerai plutôt par exemple d'inscrire chacun de ces controls dans une classe qui gére ce type de comportement (classe qui posséde un tableau de controls pour lesquels elle a positionner les handlers qui vont bien et avec potentiellement des delegates fourni lors de l'inscription).
    (Ou pourquoi pas directement gérer cela dans le panel sur sa collection de
    controls ?)

    Cdt.

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    désolé olsimare, mais tu oublies un cas.

    Le mouseMove se déclenche effectivement uniquement si le pointeur se trouve dans le controle SAUF dans le cas ou l'utilisateur a appuyé sur un bouton de la souris alors qu'il se trouvait dans le contrôle. Dans ce cas là, le pointeur de souris, bien qu'étant en dehors du contrôle va continuer à envoyer des mouseMove....

    D'ou ma méthode qui permet de "filer" le Focus à un autre controle.

    La méthode que j'ai décrite, je l'ai testé avec 4 boutons qui se trouvait sur une form.. et ca fonctionnait très bien...

    Pour faire mon test, j'ai mis 4 delegate pour les mousemove de chaque boutons avec l'affichage d'un texte explicite dans un label... et le comportement correspondait à celui demandé par Maglif


    The Monz, Toulouse

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    salut

    désolé olsimare, mais tu oublies un cas.

    Le mouseMove se déclenche effectivement uniquement si le pointeur se trouve dans le controle SAUF dans le cas ou l'utilisateur a appuyé sur un bouton de la souris alors qu'il se trouvait dans le contrôle. Dans ce cas là, le pointeur de souris, bien qu'étant en dehors du contrôle va continuer à envoyer des mouseMove....

    D'ou ma méthode qui permet de "filer" le Focus à un autre controle.

    La méthode que j'ai décrite, je l'ai testé avec 4 boutons qui se trouvait sur une form.. et ca fonctionnait très bien...

    Pour faire mon test, j'ai mis 4 delegate pour les mousemove de chaque boutons avec l'affichage d'un texte explicite dans un label... et le comportement correspondait à celui demandé par Maglif


    The Monz, Toulouse
    Tout à fait. Seulement malgré le fait de donner le Focus à un label, le mousemove des autres composant n'est pas invoqué lorsque je passe dessu avec le bouton de la souris enfoncé.

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    ecoutes, chez moi, l'exemple suivant fonctionne, je te propose de le charger
    et d'essayer



    The Monz, Toulouse
    Fichiers attachés Fichiers attachés

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci, effectivement avec les buttons ça marche très bien, le problème vient donc de mon control. Il hérite de UserControl, je suppose qu'il y a quelque chose a gérer dessu pour que ça fonctionne comme avec les buttons.

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    Tu peux faire le test suivant...

    Tu remplaces un des boutons de mon exemple par ton Usercontrol et tu vois
    si ca fonctionne.... si cela fonctionne dans tous les cas, génial, sinon, il te faut débugguer pour voir à quel moment ca bloque.

    Est-ce sur le mouseMove qui croit être "toujours" dans le userControl ? (à ce moment là, faut peut-etre vérifier le ClientRectangle) ou bien si c'est autre chose ? (à voir, je ne peux pas statuer sans connaitre le controle)...

    Ton userControl, c'est quoi ? Un amalgame de controle ou bien un control perso ou tu fais ton propre OnPaint(), etc... ?

    JE te demande cela car s'il s'agit d'un assemblage de controle, il te faut comprendre que chaque controle inclus va récupérer des infos et donc, le code que j'ai mis pour l'exemple des boutons, faudrait l'appliquer à ton userControl !

    The Monz, Toulouse

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Mon UserControl est tout simple, il s'agit simplement d'un cercle dessiné avec GDI+. Ce que j'ai remarqué : Si je clique sur un des boutons et que je glisse ma souris sur mes control, il détecte bien le changement de composant, mais si je clique sur un de mes control et que je glisse la souris alors il ne detecte plus le changement de control, même sur les boutons.

  14. #14
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    as tu pensé à bien mettre le code sur le mouseMove pour ton userControl ?

    Normalement, il n'y a pas de raison particulière , si tu gères le mouseMove de ton UC pour que le comportement soit différent d'un bouton.

    The Monz, Toulouse

  15. #15
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    ok, je pense avoir trouvé

    Quand ta souris n'est plus dans le bazar, la solution est de mettre la propriété
    Capture de ton controle à False

    The Monz, Toulouse

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Génial, ça marche !
    Merci beaucoups de ton aide et de ton temps

  17. #17
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    avec plaisir (comme on dit à Toulouse)...

    Et penses à prendre le temps d'aider les autres (quand tu le peux) comme j'ai pu le faire pour toi....



    The Monz, Toulouse

    PS: pour info, chercher la résolution de ton problème me permet aussi de m'améliorer encore un peu

  18. #18
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par theMonz31
    avec plaisir (comme on dit à Toulouse)...
    Et comme dans beaucoup d'autres regions

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

Discussions similaires

  1. Ouvrir un ContextMenuStrip avec un click gauche
    Par Chacha35 dans le forum Windows Forms
    Réponses: 13
    Dernier message: 30/03/2010, 12h56
  2. Alternative au déploiement avec Click-once
    Par vladvad dans le forum Visual Studio
    Réponses: 3
    Dernier message: 08/03/2007, 01h14
  3. simuler le click gauche de la souris
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 20/12/2006, 20h55
  4. selection image avec click
    Par Tail dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2006, 10h05
  5. [C#] Contextmenu Click gauche
    Par mbibim63 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/09/2006, 01h45

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