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

Framework .NET Discussion :

Problème avec l'event mouse_enter


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Par défaut Problème avec l'event mouse_enter
    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 :
    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 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
    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;
    }
    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...

    Auriez-vous une idée pour corriger cela ?

    Je précise que je développe sous Visual Studio 2010 Ultimate.

    Merci !

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Le MouseDown devrait activer les traitements du MouseEnter.
    Et j'ai ajouté une sécurité au cas où le MouseEnter se déclencherait 2 fois (?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Control prevPanel=null ;
    void rect_MouseUp(object sender, EventArgs e) { isDown = false; prevPanel=null ; }
     
    void rect_MouseEnter(object sender, EventArgs e) 
    { 
       if (isDown && (prevPanel==null || prevPanel!=sender)) 
       {
          PrevPanel=sender ;
          ... ton code ... 
        }
    } 
     
    void rect_MouseDown(object sender, EventArgs e) { isDown = true; prevPanel=null ; rect_MouseEnter(sender,e) ; }

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Par défaut
    J'ai dû caster sender en Control, à la ligne 8 de ton code.

    Mais ça ne fonctionne pas non plus...

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Par défaut
    Ptit UP

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    A la place du MouseEnter, essaye l'event MouseHover (en gardant le code avec prevPanel).

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Par défaut
    Toujours le même problème...

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

Discussions similaires

  1. [AC-2007] problème avec treeview_nodeClick event
    Par orfeu dans le forum IHM
    Réponses: 3
    Dernier message: 03/09/2012, 09h58
  2. [APIwin32-waitcommevent] Problème avec l'event
    Par weaponsb dans le forum Windows
    Réponses: 8
    Dernier message: 27/04/2009, 10h27
  3. Problème avec un event
    Par Rapha222 dans le forum C#
    Réponses: 3
    Dernier message: 12/12/2008, 07h42
  4. Problème avec les events MouseEnter, Leave
    Par Kaidan dans le forum Silverlight
    Réponses: 0
    Dernier message: 30/10/2008, 08h47
  5. Problème avec event handler
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2005, 09h31

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