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 :

Infobulle sur une ListView


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut Infobulle sur une ListView
    Bonjour,
    Voici mon problème :
    J'ai une ListeView avec x items. Je voudrais lorsque la souris s'arrête sur un item (au bout de 2 secondes) afficher le contenu de l'item en infobulle. J'ai essayé avec les méthodes MaListeView_MouseMove et MaListeView_MouseHover, mais :
    Pour MaListeView_MouseMove : l'infobulle garde le contenu que j'y mets la premiere fois
    Pour MaListeView_MouseHover : dès que je bouge la souris un nouvel infobulle apparait, du coup il y en a x affichés en même temps.
    De plus dans les 2 cas :
    Je n'arrive pas à mettre un Timer de 2 secondes avant l'affichage.
    Je n'arrive pas a killer l'infobulle affiché dès que l'uitlisateur bouge la souris.
    Si vous pouvez m'aider
    Merci bp
    Cédric

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut Info Bulle, ToolTip dans ListView
    Bonjour

    Pour bien afficher l'info bulle, j'ai utilisé comme toi l'évènement MouseMove et un timer.
    J'ai créé une variable qui désigne l'état de l'info bulle:
    enum toolTipStatus{Rien,AttendDemarrageTimer,AttendAffichage,Affichage};

    Rien=Info bulle effacée
    AttendDemarrageTimer=On doit démarrer la tempo d'affichage de l'info bulle
    AttendAffichage=On attend la fin de la tempo pour afficher l'info bulle
    Affichage=Affichage de l'info bulle
    On fonction de la position de la souris et de l'état courant de ma variable toolTipStatus, je modifie cette dernière:
    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
    //On récupére l'enregistrement courant
    			ListViewItem lvi= malistView.GetItemAt(e.X, e.Y);
     
    			//Si on a rien, on cache l'info bulle si il y en a une
    			if(lvi==null)
    			{
    				m_toolTipStatus=toolTipStatus.Rien;
    				return;
    			}
    			switch(m_toolTipStatus)
    			{
    				case toolTipStatus.Rien: //Si on avait rien, on attend le délai avant affichage
    					listViewItemToolTip=lvi;
    					m_toolTipStatus=toolTipStatus.AttendDemarrageTimer;
    					break;
    				case toolTipStatus.AttendAffichage: //On affiche ou attend l'affichage, mais on vérifie que l'on est pas passé sur un autre enregistrement depuis
    				case toolTipStatus.Affichage:
    					if(listViewItemToolTip!=lvi)
    					{
    						listViewItemToolTip=lvi;
    						m_toolTipStatus=toolTipStatus.AttendDemarrageTimer;
    					}
    					break;
     
    			}
    Le timer gère l'affichage de l'info bulle et les informations à afficher en fonction de l'état de la variable toolTipStatus:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    timerToolTip.Stop(); //On stop le timer pour éviter la ré-entrance
    			textBoxStatus.Text=m_toolTipStatus.ToString(); //On affiche la configuration actuelle de l'info bulle
    			switch(m_toolTipStatus)
    			{
    				case toolTipStatus.Rien: //Si l'info bulle est affichée on la masque
    					if(monToolTip.Active==true)
    						monToolTip.Active=false;			
    					break;
    				case toolTipStatus.Affichage: //Info bulle affichée
    					break;
    				case toolTipStatus.AttendAffichage: //La tempo est démarrée et on attend qu'elle soit écoulée pour afficher
    					//Si il est affiché, on le masque car on attend la fin de la tempo
    					if(monToolTip.Active==true)
    						monToolTip.Active=false;
    					//Calcul du temps écoulé
    					ellapse=Environment.TickCount-nDebutTempo;
    					if(ellapse>TOOL_TIP_DELAY)
    					{
    						//Le tempo est écoulé
    						//ICI ON DEFINIT LE TEXTE A AFFICHER DANS L'INFO BULLE
    						monToolTip.SetToolTip(malistView,listViewItemToolTip.ToString());
     
    						//On affiche l'info bulle
    						monToolTip.Active=true;
     
    						//On change le status
    						m_toolTipStatus=toolTipStatus.Affichage;
     
    						//On bouge un peux la souris, car sinon l'info bulle ne s'affiche pas
    						Cursor.Position=new Point(Cursor.Position.X+1,Cursor.Position.Y);
     
    					}
    					break;
    				case toolTipStatus.AttendDemarrageTimer: //On va démarrer la tempo
    					//Si il est affiché, on le masque car on attend la fin de la tempo
    					if(monToolTip.Active==true)
    						monToolTip.Active=false;
     
    					nDebutTempo=Environment.TickCount;
    					m_toolTipStatus=toolTipStatus.AttendAffichage;
    					break;
     
    			}
    			//Redémarrage timer
    			timerToolTip.Start();
    J'ai écrit un petit programme en C# sur ce principe que j'ai mis sur mon serveur. Tu peux télécharge le zip avec ce lien:
    http://www.artweweb.com/Forum/ListViewInfoBulle.zip
    Voici une copie d'écran de l'affichage de l'info bulle avec mon programme
    http://www.artweweb.com/Forum/ListViewInfoBulle.JPG

    J'espère que ma réponse te conviendra
    Si tu as d'autres questions n'hésite pas.
    Salut

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Salut Elx38,
    Merci bp pour ta réponse. J'ai pas eu le temps de tester mais c'est sûr que c'est ce que je voulais. Je vais essayer de le tester cet apres midi.
    Mille fois merci
    Cédric

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Re,
    je viens de tester ton programme. en fait le premier affichage est nickel par contre apres ca ne fait que clignoter. j'ai regardé le code, j'arrive pas a voir pourquoi. Ca te le fait toi aussi?
    Cédric

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut Problème scintillage info bulle
    Salut
    Non, je n'ai aucun problème de clignotement de l'info bulle. Par contre j'ai remarqué que lorsque la souris quitte le contrôle je n'ai pas ré-initialisé la variable toolTipStatus à "Rien" et désactivé l'info bulle.
    Je te ferai une nouvelle version dans la soirée.

    Le problème vient peut être de la configuration du toolTip par rapport à ton PC, et ton systeme d'exploitation.
    Moi je fonctionne sous XP et le code utilise la version 1.1 du framework.

    Essaye de mettre l'info bulle sur un bouton avec le paramétrage suivant et regarde si tu as toujours le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    monToolTip= new ToolTip();
     
    			//Affichage immédiat pedant longtemps
    			monToolTip.AutoPopDelay = 10000;
    			monToolTip.InitialDelay = 1;
    			monToolTip.ReshowDelay = 1;
     
    			//Affiche le tool tip même si le contrôle n'est pas actif
    			monToolTip.ShowAlways = true;
    .

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut ListView, info bulle gestion MouseLeave
    Salut
    J'ai testé mon petit programme sur d'autres PC et je n'ai toujours pas pu mettre en évidence ton problème de clignotement. Peux tu me donner d'autres indices.
    Par contre j'ai corrigé la gestion de l'info bulle quand la souris quitte le controle en mettant la variable m_toolTipStatus "Rien" sur l'évènement MouseLeave
    Tu peux télécharger cette nouvelle version le lien:
    http://www.artweweb.com/Forum/ListViewInfoBulle.zip

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

Discussions similaires

  1. Copier coller sur une listView
    Par themahg dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/05/2008, 12h21
  2. Drag drop et double click sur une listview
    Par mr_keyser dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/12/2007, 16h45
  3. Infobulle sur une image
    Par HwRZxLc4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/04/2007, 11h59
  4. Réponses: 4
    Dernier message: 01/12/2006, 11h31

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