Bien le bonjour,
Je suis en train de développer une application de contrôle parental, dans le cadre d'un projet scolaire.
Je rencontre un petit problème avec les évènements concernant la souris...
En fait, j'ai un TableLayoutPanel, de 7 lignes, et 48 colonnes. Dans chaque case de ce TLP, j'insère un contrôle Panel (c'est une grille qui permet de vérifier les horaires auxquels un joueur peut jouer).
En fait, actuellement, j'utilise l'event click, ce qui me permet de changer la couleur du panel qui reçoit le click.
J'aimerais cliquer, maintenir le clic, et glisser la souris jusqu'à une autre case, et relâcher le clic, et toutes les cases sur lesquelles je serai passé devront changer de couleur.
Donc, j'utilise l'event Mouse_Down. Quand je rentre dans son handler, je mets une variable membre à true, et que je relâche, l'event Mouse_Up remets la variable à false.
Lorsque je rentre dans le handler Mouse_Enter, je vérifie sur la variable est à true, et si c'est le cas, je change la couleur de la case.
Mais ça ne fonctionne pas.
Voici le code en question :
Pour placer les contrôles Panel dans les cases du TableLayoutPanel :
Et les handlers correspondants :
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 for (i = 0; i < 48; i++) { for (j = 0; j < 7; j++) { rect = new Panel(); rect.BackColor = Color.DodgerBlue; rect.MouseClick += new MouseEventHandler(rect_MouseClick); rect.MouseDown += new MouseEventHandler(rect_MouseDown); rect.MouseEnter += new EventHandler(rect_MouseEnter); rect.MouseUp += new MouseEventHandler(rect_MouseUp); rect.Width = 19; rect.Height = 19; GrilleHoraireTLP.Controls.Add(rect, i, j); } }
Et quand je place des points d'arrêt au niveau des handlers enter, up et down, et que le programme est exécuté pas-à-pas, ça fonctionne correctement...
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 void rect_MouseUp(object sender, EventArgs e) { isDown = false; } void rect_MouseEnter(object sender, EventArgs e) { if (isDown == true) { if (((Panel)sender).BackColor == Color.DodgerBlue) ((Panel)sender).BackColor = Color.White; else ((Panel)sender).BackColor = Color.DodgerBlue; } } void rect_MouseDown(object sender, EventArgs e) { isDown = true; } void rect_MouseClick(object sender, EventArgs e) { if (((Panel)sender).BackColor == Color.DodgerBlue) ((Panel)sender).BackColor = Color.White; else ((Panel)sender).BackColor = Color.DodgerBlue; }
Auriez-vous une idée pour corriger cela ?
Je précise que je développe sous Visual Studio 2010 Ultimate.
Merci !
Partager