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 :

Lister et accéder aux propriétés d'un controle


Sujet :

Windows Forms

  1. #1
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut Lister et accéder aux propriétés d'un controle
    Hello,

    J'utilise une boucle foreach() pour lister tous les contrôles présent sur une Form.

    J'aimerai pour chaque contrôle retourné, tester si la propriété "Description" existe pour ce contrôle et y accéder. Je voudrais éviter d'avoir à caster tous les cas possibles, vu le nombre de contrôles possible.

    Pour l'instant j'utilise ça, car il n'y a qu'un type de contrôle sur la form en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                foreach (Control tmpControl in this.Controls)
                {
                    if (tmpControl is PureComponents.EntrySet.Controls.Button)
                    {
                        ToolTip tmpToolTip = new ToolTip();
                        tmpToolTip.SetToolTip(tmpControl, (tmpControl as PureComponents.EntrySet.Controls.Button).Description.ToString());
                    }
                }
    Merci

  2. #2
    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 753
    Points
    39 753
    Par défaut
    Tous les contrôles n'ont pas une propriété Description...
    Tu peux récupérer la propriété par réflexion, et l'afficher si elle existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        foreach (Control tmpControl in this.Controls)
        {
            PropertyInfo prop = tmpControl.GetType().GetProperty("Description");
            if (prop != null)
            {
                object value = prop.GetValue(tmpControl, null);
                string s = null
                if (value != null) s = value.ToString();
                toolTip.SetToolTip(tmpControl, s);
            }
        }
    PS: pas la peine de recréer un ToolTip à chaque fois : il suffit d'en créer un (avec le designer) et de le réutiliser à chaque fois...

  3. #3
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Merci, j'avais fini pas trouver un article sur la réflexion (bien pratique !) pour aboutir à ce code après quelques prises de tête :
    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 frmErreur()
            {
                InitializeComponent();
                ToolTip tmpToolTip = new ToolTip();
                foreach (Control tmpControl in this.Controls)
                {
                    try
                    {
                        tmpToolTip.SetToolTip(tmpControl, ((object)tmpControl.GetType().GetProperty("Description").GetValue(tmpControl, null)).ToString());
                    }
                    catch(Exception)
                    {
                    }
                }
            }
    D'où une petite question, question propreté/efficacité du code, vaut-il mieux faire une succession de tests comme tu le fais ou bien utiliser un try/catch si la propriété n'existe pas ?

  4. #4
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Okaryn Voir le message
    D'où une petite question, question propreté/efficacité du code, vaut-il mieux faire une succession de tests comme tu le fais ou bien utiliser un try/catch si la propriété n'existe pas ?
    Il vaut mieux faire des tests. Les exceptions devraient être utilisées uniquement pour les erreurs non prévisibles. La gestion d'exception est assez lourde en termes de performances, donc quand tu peux l'éviter c'est mieux...
    Quelques liens sur le sujet :
    http://www.codeproject.com/KB/except...rformance.aspx
    http://blogs.msdn.com/ricom/archive/.../19/44697.aspx
    http://www.developerfusion.com/artic...rmance-in-net/

  5. #5
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    Merci pour ces lectures intéressantes

    Quitte à apprendre un nouveau langage, autant le faire bien

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    A noter que si tu as la main sur tous les contrôles qui définissent une propriété Description, il est plus avantageux de définir une interface avec cette propriété et de faire en sorte que les contrôles l'implémentent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public frmErreur()
    {
      InitializeComponent();
      ToolTip tmpToolTip = new ToolTip();
      foreach (Control tmpControl in this.Controls)
      {
        IHasDescription hdControl = tmpControl as IHasDescription;
        if (hdControl != null)
        {
           tmpToolTip.SetToolTip(tmpControl, hdControl.Description);
        }
      }
    }

  7. #7
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Greybird Voir le message
    A noter que si tu as la main sur tous les contrôles qui définissent une propriété Description, il est plus avantageux de définir une interface avec cette propriété et de faire en sorte que les contrôles l'implémentent.
    Tout à fait d'accord sur le principe... mais apparemment il s'agit des contrôles de PureComponents, donc il n'a pas la main dessus.

    Par contre, il peut être intéressant de voir à quel niveau de la hiérarchie de classe est définie la propriété Description : si elle est définie dans une (hypothétique) classe de base de tous les contrôles PureComponents, tu peux manipuler les contrôles via cette classe pour accéder à la propriété.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/02/2010, 16h45
  2. Réponses: 2
    Dernier message: 09/11/2007, 15h32
  3. Réponses: 3
    Dernier message: 02/01/2007, 14h09
  4. Accéder aux propriétés d'une feuille de style liée
    Par b Oo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/05/2006, 08h34
  5. [C#]Accéder aux propriétés d'un User Control
    Par djoao dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/03/2006, 09h54

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