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 :

Reflection durant le design time


Sujet :

C#

  1. #1
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut Reflection durant le design time
    Bonjour,

    Je désire créer un User control avec une propriété dans Visual studio pour pouvoir sélectionner un Type qui existe dans la solution.

    Ce qui me bloque, c'est de récupérer la liste des types existants dans la solution

    Je parle bien lors du design et non pas quand l'application tourne.



  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    J'ai du mal à saisir, la propriété dont tu parles est de quel type ?
    Tu as un morceau de code pour éclairer un peu sur ce que tu veux faire ?
    D'après ce que j'ai compris, tu veux créer un UserControl qui possède une propriété de type Type. Et tu veux que le designer te propose comme valeurs (visuellement dans la fenêtre des propriétés, comme pour les couleurs) les types des classes qui sont définis dans ta solution ?
    C'est ça ? ou n'ai je rien compris ?

  3. #3
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par SaumonAgile
    J'ai du mal à saisir, la propriété dont tu parles est de quel type ?
    Tu as un morceau de code pour éclairer un peu sur ce que tu veux faire ?
    D'après ce que j'ai compris, tu veux créer un UserControl qui possède une propriété de type Type. Et tu veux que le designer te propose comme valeurs (visuellement dans la fenêtre des propriétés, comme pour les couleurs) les types des classes qui sont définis dans ta solution ?
    C'est ça ? ou n'ai je rien compris ?
    Si c'est ça il faut que tu définisses ton propre designer pour le type de donnée qui sera instancié par VS au moment du design. A partir de la tu peux récupérer par réflexion les types de ta solution. Attention toutefois au fait que tu vas travailler sur les versions compiler des libs et que tu n'auras pas forcément par réflexion les dernieres classes ajouté dans ta solution. (Sauf VS fait un petite compilation avant d'appeler le designer mais la je sais pas du tout)

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    C'est bien ça !

    Voici la propriété dans mon User Control qui permet grâce à ses attributs d'afficher une propriété TypeSelected dans la fenêtre des propriétés de Visual Studio en mode design :

    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
    62
    63
    64
    65
    66
    67
    68
    internal class List_DDLDataObject
    {
        internal static string[] _ListofDDLDataObject = null;
     
    }
     
    public partial class Login : System.Web.UI.UserControl
    {
        [System.ComponentModel.Category("Data")]
        [System.ComponentModel.Browsable(true)]
        [System.ComponentModel.TypeConverter(typeof(RuleConverter))]
        public string TypeSelected
        {
            get
            {
                try
                {
                    string S = "";
     
                    if (_DDLDataObjectName != null)
                    {
                        // Affiche la valeur sélectionnée
                        S = _DDLDataObjectName;
                    }
                    else
                    {
                        // Aucune valeur sélectionnée, on va prendre la première disponible
                        if (List_DDLDataObject._ListofDDLDataObject.Length > 0)
                        {
                            S = List_DDLDataObject._ListofDDLDataObject[0];
                        }
                        else
                        {
                            S = "???";
                        }
                    }
     
                    return S;
                }
                catch (System.Exception exc) { return exc.Message; }
            }
            set { _DDLDataObjectName = value; }
        }
    }
     
    public class RuleConverter : System.ComponentModel.StringConverter
    {
     
        public override bool GetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContext context)
        {
            return true;
        }
     
        public override bool GetStandardValuesExclusive(System.ComponentModel.ITypeDescriptorContext context)
        {
            return true;
        }
     
        public override
            System.ComponentModel.TypeConverter.StandardValuesCollection
            GetStandardValues(System.ComponentModel.ITypeDescriptorContext context)
        {
            string[] strTypes = { "Type1", "Type2", "Type3" };
            List_DDLDataObject._ListofDDLDataObject = strTypes;
     
            return new StandardValuesCollection(List_DDLDataObject._ListofDDLDataObject);
        }
    }

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par dev01
    Si c'est ça il faut que tu définisses ton propre designer pour le type de donnée qui sera instancié par VS au moment du design.
    Tu as un lien ou quelque chose dans le genre ?

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Donc si je comprends toujours bien (), il ne reste plus qu'à remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { "Type1", "Type2", "Type3" }
    par la liste des types de l'assembly.
    Tu dois pouvoir utiliser Assembly.GetExecutingAssembly().GetTypes() pour récupérer la liste des types définis.

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    regarde ce qu'il y a la dedans : http://www.codeproject.com/csharp/CustomDesigner.asp

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par SaumonAgile
    Donc si je comprends toujours bien (), il ne reste plus qu'à remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { "Type1", "Type2", "Type3" }
    par la liste des types de l'assembly.
    Tu dois pouvoir utiliser Assembly.GetExecutingAssembly().GetTypes() pour récupérer la liste des types définis.
    Deja essayé, ça marche pas.

    Citation Envoyé par dev01
    Salut .

    regarde ce qu'il y a la dedans : http://www.codeproject.com/csharp/CustomDesigner.asp
    Je regarde de suite merci !

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    En remplaçant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string[] strTypes = { "Type1", "Type2", "Type3" }; 
    List_DDLDataObject._ListofDDLDataObject = typeNames;
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Type[] types = Assembly.GetExecutingAssembly().GetTypes();
    String[] typeNames = new string[types.Length];
    Int32 index = 0;
    foreach (Type type in types)
    {
    	typeNames[index] = type.FullName;
    	index++;
    }
    List_DDLDataObject._ListofDDLDataObject = typeNames;
    j'obtiens bien la liste des noms des types dans le designer. Cela correspond-il à ton besoin ?

Discussions similaires

  1. [design time] copier coller de controles
    Par Pol63 dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/05/2008, 17h06
  2. Design-time : redimensionner un usercontrol
    Par Yoshio dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/04/2008, 10h08
  3. [ASP 2.0]Modifs Propriété ascx Design time
    Par chnew dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/06/2007, 09h30
  4. [D7] Menu d'un composant à design time
    Par Herk77 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 25/11/2006, 16h51

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