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

C# Discussion :

Détection curseur souris dans une zone donnée


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut Détection curseur souris dans une zone donnée
    Bonjour,

    J'aimerai déclencher un évènement lorsque le curseur de la souris est dans une certaine zone de la fenêtre (exemple : à 200 px du bord gauche).
    Comment puis-je réaliser cela en C#.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    tu dois pouvoir pister la position de la souris via l'event MouseMove de ton instance de Form (qui met à disposition un MouseEventArgs contenant cette position).
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Merci pour votre réponse ,

    Voici ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            private void Window_MouseMove_1(object sender, MouseEventArgs e)
            {
                Point p = new Point();
                p = e.GetPosition(this);
                if (p.X > CoorX)
                {
                    //traitement
                }
            }
    Tout fonctionne très bien, cependant j'aimerais rajouter la notion de temps, c'est à dire que la condition doit être vraie pendant x secondes pour exécuter le traitement.
    Y'a t'il un un moyen plus simple que de déclencher un timer ?

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Petite remarque rapide : tu dois pouvoir faire directement e.X, plutôt que d'initialiser un Point

    Pour ta limite de temps je sais pas bien, même avec un Timer, tout va dépendre du "traîtement" que tu comptes faire. Dis m'en plus.
    Plus je connais de langages, plus j'aime le C.

  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 195
    Points
    5 195
    Par défaut
    Tu enclenches un timer quand tu rentres dans la zone...

    et tu l'arrêtes quand tu en sors...

    et donc, si tu sors avant, la callback du timer ne sera pas appelée, sinon, elle le sera

    C'est plutôt simple quand même et ça fait pas beaucoup de ligne de code à gérer...

    ET en passant, le "plus" propre serait de créer une Region correspondant à ta zone et voir si la souris se trouve dans la Region (les méthodes pour faire celà
    sont déjà dans la classe Region... et idéalement, tu pourrais même avoir une classe qui contiendrait la region + un delegate de la fonction à utiliser quand
    tu te trouves dans la région et mettre tout celà dans une liste, si tu es dans une situation ou il pourrait y avoir plusieurs zones de détection...

    Ca prend 5 mn à faire...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Voici ce que j'ai fais :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            private void Window_MouseMove_1(object sender, MouseEventArgs e)
            {
                Point p = new Point();
                p = e.GetPosition(this);
     
                if ((p.X > CoorX) && (dispatcherTimer.IsEnabled == false))
                {
     
                    dispatcherTimer.Tick += new EventHandler(_timer_Elapsed);
                    dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
                    dispatcherTimer.IsEnabled = true;
     
                    dispatcherTimer.Start();
     
                }
                else if ((p.X < CoorX))
                {
                   dispatcherTimer.Stop();
     
                   dispatcherTimer.IsEnabled = false;
     
                }
            }
     
            void _timer_Elapsed(object sender, EventArgs e) //quand fin de timer
            {
                if (dispatcherTimer.IsEnabled == true) 
                    { 
                        //traitement 
                    }
            }
    Il y a probablement plus simple, mais c'est la première idée qui m'est venue. En WPF, on ne peut pas passer directement par "e.Y" malheureusement, j'ai dû passer par un objet Point.

    En tout cs ça marche, merci à vous pour m'avoir aiguillé

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

Discussions similaires

  1. Bloquer le curseur de la souris dans une zone
    Par Andalor dans le forum IHM
    Réponses: 9
    Dernier message: 02/11/2017, 10h42
  2. Bloquer le curseur de la souris dans une zone
    Par ewp02 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 25/10/2011, 15h43
  3. Selection avec la souris dans une zone de texte
    Par GESCOM2000 dans le forum IHM
    Réponses: 8
    Dernier message: 11/02/2006, 10h12
  4. Retrouver une donnée dans une zone de liste
    Par uloaccess dans le forum Access
    Réponses: 9
    Dernier message: 07/11/2005, 13h25
  5. forcer le curseur à ce positionner dans une zone texte
    Par caton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/04/2005, 14h17

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