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 :

[c#] Empécher un tooltip de clignoter


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut [c#] Empécher un tooltip de clignoter
    Salut, j'affiche un tooltip quand l'utilisateur passe la souris au dessus d'un node d'un treeview. Le tooltip s'affiche correctement, sauf qu'il clignote. Comment je peux empécher ce phénomène???

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    WinForm ?
    WebForm ?

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut
    Je travaille sur une winform.
    Mon code est le suivant:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
            public void treeviewClients_MouseMove(object sender, MouseEventArgs e)
            {
                TreeNode theNode = this.treeviewClients.GetNodeAt(e.X, e.Y);
     
                this.InfoBulle.IsBalloon = true;
                this.InfoBulle.InitialDelay = 1000;
                this.InfoBulle.AutoPopDelay = 5000;
                this.InfoBulle.ReshowDelay = 500;
                this.InfoBulle.ToolTipTitle = "Client:";
                // Définir une info-bulle uniquement si le pointeur de la souris est en fait placé sur le noeud.
                if ((theNode != null))
                {
                    // Vérifier que la propriété Tag n'est pas "null".
                    if (theNode.Tag != null)
                    {
                        string texte = "";
                        try
                        {
                            //On met en place la connexion
                            ConnectionMysql Bd = new ConnectionMysql();
                            MySqlConnection Conn = Bd.Connexion();
     
                            // Ici, on ouvre la connexion au serveur
                            Conn.Open();
     
                            //Création de la commande
                            MySqlCommand MaSqlCmd = new MySqlCommand();
                            MaSqlCmd.Connection = Conn; //Connexion à la base de données
     
                            String Sql = "SELECT NomClient, PrenomClient FROM clients WHERE NumSecuriteSociale = " + theNode.Tag.ToString() + ";";
     
                            // On execute la requete
                            MaSqlCmd.CommandText = Sql; //Récupération de la commande
                            MySqlDataReader monSqlDR = MaSqlCmd.ExecuteReader(); //Execution de la commande
     
                            while (monSqlDR.Read())
                            {
                                texte = monSqlDR.GetValue(0).ToString() + " " + monSqlDR.GetValue(1).ToString();
                            }
                            Conn.Close();
                        }
                        catch (MySqlException error)
                        {
                            MessageBox.Show("Problème lors de la création des informations de l'infobulle : " + error);
                        }
                        // Modifier l'info-bulle uniquement si le pointeur a été déplacé vers un nouveau noeud.
                        if (theNode.Tag.ToString() != this.InfoBulle.GetToolTip(this.treeviewClients))
                        {
                            this.InfoBulle.SetToolTip(this.treeviewClients, texte);
                        }
                    }
                    else
                    {
                        this.InfoBulle.SetToolTip(this.treeviewClients, "");
                    }
                }
                else     // Le pointeur n'est pas placé sur un noeud. Effacer l'info-bulle.
                {
                    this.InfoBulle.SetToolTip(this.treeviewClients, "");
                }
            }

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Oulalalalala !
    Tu fais une requète en base dans un MouseMove ?
    Tu sais combien de fois cette fonction est appelée quand tu déplaces ta souris sur ton Treeview ? Pas très étonnant que ça clignote...

    Franchement, c'est bien moins lourd pour ta machine de faire une requète pour tous les noeuds visibles, de les stocker dans une table, et de modifier les tooltips que quand c'est nécessaire.

    Ensuite, pourquoi ne pas initialiser une seule fois les paramètres de ton InfoBulle, plutôt que de le faire à chaque déplacement de souris ?

    Sinon le reste est ok.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 431
    Par défaut
    Citation Envoyé par Mose
    Oulalalalala !
    Tu fais une requète en base dans un MouseMove ?
    Tu sais combien de fois cette fonction est appelée quand tu déplaces ta souris sur ton Treeview ? Pas très étonnant que ça clignote...

    Franchement, c'est bien moins lourd pour ta machine de faire une requète pour tous les noeuds visibles, de les stocker dans une table, et de modifier les tooltips que quand c'est nécessaire.
    Ah oui... Je n'avais pas pensé à ca... Effectivement ca doit être lourd.
    Le truc, c'est que je veux afficher une liste de clients dans une arborescence. Je dispose également d'une textbox que l'utilisateur peut utilisée pour afficher les clients dont le nom commence par les lettres qui sont rentrées dans la textbox. Il faut donc réinitialiser l'arborescence à chaque fois. Mais ca serait le cas avec une table non?
    De toute facon, il me suffit de remplir le champ tag (que j'affiche dans le tooltip) complétement au moment de la création de l'arborescence, et je pourrais déja enlever les requètes de la fonction mouseMove.
    Citation Envoyé par Mose
    Ensuite, pourquoi ne pas initialiser une seule fois les paramètres de ton InfoBulle, plutôt que de le faire à chaque déplacement de souris ?
    Car les informations que je met dans le tooltip change en fonction du node survolé.

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par boss_gama
    Ah oui... Je n'avais pas pensé à ca... Effectivement ca doit être lourd.
    Très
    Citation Envoyé par boss_gama
    Il faut donc réinitialiser l'arborescence à chaque fois. Mais ca serait le cas avec une table non?
    Effectivement, quand tu réinitialise le contenu de ton TreeView, il faut réinitialiser la "table des tooltips" (j'ai dit table comme j'aurais pu dire liste ou tableau).
    Maintenant si ton champs Tag est libre, pas besoin de cette table, autant l'utiliser.
    Citation Envoyé par boss_gama
    Citation Envoyé par Mose
    Ensuite, pourquoi ne pas initialiser une seule fois les paramètres de ton InfoBulle, plutôt que de le faire à chaque déplacement de souris ?
    Car les informations que je met dans le tooltip change en fonction du node survolé.
    Je parlais de l'initialization, pas du texte.
    A savoir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.InfoBulle.IsBalloon = true;
    this.InfoBulle.InitialDelay = 1000;
    this.InfoBulle.AutoPopDelay = 5000;
    this.InfoBulle.ReshowDelay = 500;
    this.InfoBulle.ToolTipTitle = "Client:";
    Ce code là étant identique partout, je ne comprend pas pourquoi tu ré-exécute ce code à chaque appel de MouseMove.
    Une fois au début suffit

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

Discussions similaires

  1. Empécher le clignotement d'une dialog modale
    Par Polux000 dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 03/03/2009, 14h47
  2. Empécher la sélection du texte des pages dans un WebBrowser
    Par DevelOpeR13 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/06/2003, 18h36
  3. Faire clignoter un caractère
    Par gtr dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 11/01/2003, 00h12
  4. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  5. Help :Problème de clignotement
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/08/2002, 10h53

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