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

Windows Forms Discussion :

[C#]Comment trouver le ToolTip


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut [C#]Comment trouver le ToolTip
    Bonjour, et meilleurs voeux pour 2010.

    Ma question est toute simple : dans une méthode recevant une form en paramètre, comment retrouver le ToolTip attaché à la form en question?

    Via la collection form.Controls ça ne fonctionne pas, car le ToolTip ne fait pas partie des controles.

    En fait, à partir d'une fenêtre principale, je récupère toutes les fenêtres filles, et je veux modifier tous les tooltips de toutes les fenêtres récupérées.

    Merci d'avance
    Claude

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    qu'appel tu toolTip de la form?
    C'est un tooltip que tu a ajouté?
    Si oui tu devrais pouvoir l'atteindre maForm.monToolTip non?

    a+

  3. #3
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu peux l'atteindre comme ça uniquement si il est déclaré en public, et non en private comme c'est le cas par défaut.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    C'est un tooltip que tu a ajouté?
    Si oui tu devrais pouvoir l'atteindre maForm.monToolTip non?
    Oui, sur chaque form, j'ai ajouté un tooltip.
    Et à partir d'une méthode, je veux pouvoir récupérer le tooltip de toute fenêtre ouverte, sans que je sache d'avance combien il y en a (de fenêtres) ni comment ils s'appellent (les tooltips).

    Je récupère les fenêtres sans problème, et je sais également récupérer tout contrôle de toute fenêtre sans problème (avec un foreach récursif).
    Mais le tooltip n'apparaît pas dans la collection des contrôles de la fenêtre, et je ne vois pas où le récupérer ailleurs.

    S'il n'y a pas moyen, j'appellerai une fonction de chaque fenêtre qui passe elle-même son propre tooltip en paramètre, mais bon ce n'est pas très élégant.

    Tu peux l'atteindre comme ça uniquement si il est déclaré en public, et non en private comme c'est le cas par défaut.
    Et encore si je m'arrange pour que le pointeur sur la form soit accessible en public par la méthode utilisée, et ce n'est pas le cas.

    Merci
    Claude

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le composant ToolTip est généralement placé dans un container qui est créé par le designer et déclaré en privé dans la Form, il n'y a donc pas de moyen "direct" d'y accéder.

    Il y a différentes options pour contourner le problème. Les plus évidentes à mon sens :

    - Utiliser la réflexion : le designer génère toujours le container avec le même nom ("components"), tu peux donc y accéder par réflexion, et boucler sur les composants qu'il contient pour trouver le tooltip. A mon avis c'est un peu "crade", mais ça a l'avantage de ne pas avoir à écrire du code dans chaque Form

    - Définir une interface, disons "IToolTipProvider", qui expose une propriété ToolTipText, et que tu implémentes dans chacune de tes Forms :

    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
    public interface IToolTipProvider
    {
        string ToolTipText { get; set; }
    }
     
    class Form1 : Form, IToolTipProvider
    {
        public  ToolTipText
        {
            get { return toolTip1.GetToolTip(this); }
            set { toolTip1.SetToolTip(this, value); }
        }
     
        ...
    }
    Pour récupérer ou définir le ToolTip d'une Form, tu peux créer des méthodes d'extension :
    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
     
    public static class ToolTipHelper
    {
        public static string GetToolTip(this Form f)
        {
            IToolTipProvider ttp = f as IToolTipProvider;
            if (ttp != null)
                return ttp.ToolTipText;
            return null;
        }
     
        public static void SetToolTip(this Form f, string toolTipText)
        {
            IToolTipProvider ttp = f as IToolTipProvider;
            if (ttp != null)
                ttp.ToolTipText = toolTipText;
        }
    }
    C'est un peu plus lourd vu qu'il faut écrire du code dans chaque Form, mais au moins c'est propre...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    La méthode de l'interface fonctionne tout à fait et me convient parfaitement

    Problème résolu avec efficacité, comme toujours, encore merci

    Claude

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

Discussions similaires

  1. Comment trouver le texte sous le curseur ?
    Par deetox dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2005, 13h54
  2. Comment trouver de vieux outils (MASM51 CL PROM86 XLINK86)
    Par CFred dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 11/01/2005, 17h54
  3. Réponses: 3
    Dernier message: 21/01/2004, 08h47
  4. Comment trouver le répertoire démarrage sous 98?
    Par PHILOSOPHE dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 18/11/2003, 20h10
  5. [CR] Comment trouver un champs dans un report ??
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/09/2003, 08h31

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