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#.
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#.
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.
Merci pour votre réponse ,
Voici ce que j'ai fais :
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.
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 } }
Y'a t'il un un moyen plus simple que de déclencher un timer ?
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.
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)
Voici ce que j'ai fais :
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.
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 } }
En tout cs ça marche, merci à vous pour m'avoir aiguillé
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager