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 :

Collection de contrôles dans la fenêtre propriétés d'un UserControl


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut Collection de contrôles dans la fenêtre propriétés d'un UserControl
    Je viens de créer un UserControl. il contient des panels (collection de controles héritant de Panel)
    J'aimerai que le concepteur graphique me permette de paramétrer par le biais de la fenêtre Propriété certain des Contrôles de la collection.

    Mes contrôles sont du type :
    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
     
        public partial class UserControl1 : UserControl
        {
            public GroupPanelColl GroupPanelCollection
            {
                set
                {
                    this.Controls = (GroupPanelColl)value;
                }
                get
                {
                    return (GroupPanelColl)this.Controls;
                }
            }
            public void Add(GroupPanel g)
            {
                this.Controls.Add(g);
            }
            public void Remove(GroupPanel g)
            {
                this.Controls.Remove(g);
            }
     
            public UserControl1()
            {
                InitializeComponent();
            }
        }
     
        public class GroupPanelColl : System.Windows.Forms.Control.ControlCollection
        {
            public GroupPanelColl()
            {
            }
            public void Add(GroupPanel panneau)
            {
                List.Add(panneau);
            }
            public void Remove(int index)
            {
                if (index <= Count - 1 && index >= 0)
                {
                    base.List.RemoveAt(index);
                }
            }
            public GroupPanel Item(int Index)
            {
                return (GroupPanel)base.List[Index];
            }
        }
     
        public class GroupPanel : Panel
        {
            public string Caption;
            public bool Active;
            public bool Movable;
            public bool Resizable;
     
            public GroupPanel()
            {
            }
        }
    C'est pour cela que j'ai créé le type GroupPanelColl afin de visualiser la collection de GroupPanel (sans cela je ne verrai pas les propriétés (Caption, Active, Movable, Resizable) des GroupPanel.

    Mais le problème c'est que tout ça ne compile même pas et que je n'y arrive aps après quelques heures passées dessus.


    Pour l'instant je ne vois pas ces contrôles.
    Comment faire pour qu'iol apparaissent dans la fenetre de propriétés ?
    en ligne 9 : this.Controls est en lecture seule.
    en ligne 32 : public GroupPanelColl() pour une ControlCollection le constructeur reçoit impérativement un Owner ! mais quoi en faire ???
    en ligne 37 : List.Add(panneau) -> List recquiert un argument de Type'1' ?????

    Bref, je dois m'y prendre comme un débtant que pourtant je ne suis pas, mais commnt faire pour que le concepteur permette la visualisation des propriétés de UserControls ??? J'ai pas trouvé de tuto sur ce sujet...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    je peux poser ma question plus simplement.
    Commentfait-on pour que pour un contrôle qu'on a créé, les propriétés des contrôles de ce Conteneur apparaissent dans la fenêtre propriétés et que quand on les change par ce biais, le contrôle soi modifié.

    Je ne trouve pas de tuto sur ce point. Je crois me rappeller qu'il faut que le contrôle hérite d'une Interface, mais je ne trouve pas laquelle...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    je continue dans ma question des foisque ça interpellerait quelqu'un...

    J'ai créé une propriété BackColor dans mon UserControl cette couleur 'serait celle d'un Button' (c'est un exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            public override System.Drawing.Color BackColor
            {
                get
                {
                    return this.backColor;
                }
                set
                {
                    this.btn1.BackColor = value;
                    this.backColor = value;
                }
            }
    Le problème est que, si lorsque j'ai compilé mon UserControl, je le colle dans une Form.
    Ladite propriété BackColor n'apparait plus dans le .designer.cs de la Form ???
    et que je suis aobligé de l'initialiser en dehors du InitializeComponent () ????

    Je pense que c'est encore une fos lié avec l'intégration des UserControl dans dans le designer graphique de VS.

    Si quelqu'un a déjà rencontré / résolu ce genre de problème je suisprener d'un tuyau...

  4. #4
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    faut regarder au niveau des attributs, il y a le [Browsable(true)] pour faire simple mais il y a moyen d'aller beaucoup plus loin.

    tu trouveras plus d'infos la : http://msdn2.microsoft.com/fr-fr/lib...fh(VS.80).aspx
    ****** Analyse/Développeur .Net

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    tu peux utiliser l'attribut [Browsable(true)] pour que ta propriété apparaisse dans le designer (fenetre de propriété j'entends par là)

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    Je doute pas de votre solution, mais y'a quelque chose que je dois rater.
    Pour faire simple, dans un User Control j'ai collé un ImageList.

    Si j'applique la méthode préconisée :
    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
     
    namespace MyNamespace
    {
        public partial class test : UserControl
        {
            [Browsable(true)]
            public ImageList MyList
            {
                get
                {
                    return this.imageList1;
                }
                set
                {
                    this.imageList1 = value;
                }
            }
            public test()
            {
                InitializeComponent();
            }
        }
    }
    Je ne vois toujours pas de la propriété MyList dans la fenêtre e propriétés ???

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    je viens de fouiller encore et encore et ça le fait toujours pas.
    même avec le code 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
     
            private string myName;
     
            [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [DefaultValue("")]
            public ImageList MyList
            {
                get
                {
                    return this.imageList1;
                }
                set
                {
                    this.imageList1 = value;
                }
            }
            [DefaultValue("")]
            public string MyName
            {
                get
                {
                    return this.myName;
                }
                set
                {
                    this.myName = value;
                }
            }
            public test()
            {
                InitializeComponent();
            }
    Toujours pas de MyList ou MyName dans la fenêtre propriétés !!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    je devais avoir une peau de sauc devant les mirettes.
    car avec le code :
    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
    private string myName;
     
            [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [DefaultValue("")]
            public ImageList MyList
            {
                get
                {
                    return this.imageList1;
                }
                set
                {
                    this.imageList1 = value;
                }
            }
            [DefaultValue("")]
            public string MyName
            {
                get
                {
                    return this.myName;
                }
                set
                {
                    this.myName = value;
                }
            }
            public test()
            {
                InitializeComponent();
            }
    ça fonctionne !
    merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    d'ailleurs même sans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    ça fonctionne encore, car ça semble plutôt concerner l'Intellisence que la visualisation dans la fenêtre propriété.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    Tout ceci ne répond pas à mes questions initiales.

    en ligne 9 : this.Controls est en lecture seule.
    en ligne 32 : public GroupPanelColl() pour une ControlCollection le constructeur reçoit impérativement un Owner ! mais quoi en faire ???
    en ligne 37 : List.Add(panneau) -> List recquiert un argument de Type'1' ?????

    qui sont celles qui me bloquent.

Discussions similaires

  1. Boutons évènements dans la fenêtre propriétés
    Par Ndugu dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 09/02/2009, 00h43
  2. Réponses: 1
    Dernier message: 20/08/2008, 12h27
  3. Réponses: 12
    Dernier message: 23/04/2007, 16h37
  4. Déplacer les contrôles dans une fenêtre.
    Par SuperWeight dans le forum Windows
    Réponses: 1
    Dernier message: 13/04/2007, 10h15
  5. Réponses: 2
    Dernier message: 24/05/2006, 23h08

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