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 :

Paramétrage de collection editors avec DesignerSerializationVisibilityAttribute


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2015
    Messages : 107
    Points : 23
    Points
    23
    Par défaut Paramétrage de collection editors avec DesignerSerializationVisibilityAttribute
    Bonsoir a tous, je cherche à créer un combobox personnalisé avec "user contrôle" et paramètré lors d'insertion au barre de propriété.
    Nom : combobox.PNG
Affichages : 229
Taille : 4,9 Ko
    sa c'est mon but principale mais actuellement je cherche à inserer un pertit combobox personnalisé qui me permet de paramètré a travers collection editors.
    Nom : collection editors.png
Affichages : 254
Taille : 18,8 Ko

    voilà mon code source de ce collection editor.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<String> list = new List<String>();
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
     
            public List<String> MyProperty { get { return list; } set { list = value; } }
    mais quand je veux ajouter nouveau membre il m'affiche ce message d'erreur:
    Nom : error collection editor.png
Affichages : 279
Taille : 18,3 Ko

    comment trouvé une solution pour cette erreur?

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Il n'y a pas de solution à cet erreur ..
    Le désigner a besoin d'un ctor NEW sans paramètre pour générer(sérialiser) les éléments du List<string> générique ...
    Le type String n' ayant pas un ctor NEW sans paramètre l'échec s'explique ...
    Pour contourner ce problème ,si tu as absolument de cette prop ,il faut un class auxiliaire WorkItem équipé d'une prop string & donc d'une prop de type List<WorkItem> du combo ...

    Apres tu peux récupérer cette prop string dans le Setter ...

    code behind .cs du class WorkItem:
    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
     
     
    using System;
    using System.ComponentModel;
     
    namespace WinCutomCombo
    {
        [Serializable]
        public class WorkItem
        {
            private int id;
     
            public int ID
            {
                get { return id; }
                set { id = value; }
            }
            private string name;
     
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public WorkItem()
            {
                ID = 100;
                Name = "workitem";
            }
     
        }
    }
    code behind .cs du class cust combo:
    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
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
     
    namespace WinCutomCombo
    {
        public partial class ComboLister : ComboBox 
        {
            public ComboLister()
            {
                InitializeComponent();
            }
     
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
     
            private List<WorkItem> workitems = new List<WorkItem>();
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            public List<WorkItem> WorkItems
            {
                get { return workitems; }
                set 
                { 
                    foreach (var item in value )
                    {
                        workitems.Add(item);
     
                    }
                    // do stuff
                    //recuperation dans la prop Items du combo pour affichage
                    foreach (var item in workitems)
                    {
                        this.Items.Add(item.Name);
     
                    }
                }
     
            }
     
        }
    }
    Il faut observer que c'est par un mécanisme semblable que la propriété Items du Combo de type ComboBox.ObjectCollection (C'est une Collection de type Object spécifique dérivée de CollectionBase) permet d'accepter un string ou même des class plus étoffés...

    Ce point est illustré en code vb.net dans ce post
    http://www.developpez.net/forums/d16...mbobox-vb-net/
    bon code...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2015
    Messages : 107
    Points : 23
    Points
    23
    Par défaut erreur
    je met ce code mais je trouve qu'il y'a une erreur.
    Nom : 2016-09-14_184921.png
Affichages : 267
Taille : 14,2 Ko

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Ton class Workitem n'est pas déclaré Public alors la prop WorkItems du combolister est déclaré Public....
    c'est clair...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2015
    Messages : 107
    Points : 23
    Points
    23
    Par défaut
    je rendre le classe WorkItem en public mais je trouve encore une autre erreur incomprehensible:
    Nom : RESX.png
Affichages : 206
Taille : 14,5 Ko

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Bonjour

    La sérialisation des valeurs d'une prop au moment du Design par le Concepteur VS (persistance des valeurs entrées au moment du Design durant exécution ou Run-time ) est faite par le class CollectionEditor générique...
    Celui-ci ne géré que les Array (List<T> et Collection<T> ne sont pas pris en charge ..
    Par suite le code du class ComboLister revu est :
    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
     
     
    public partial class ComboLister : ComboBox 
        {
            public ComboLister()
            {
                InitializeComponent();
     
            }
     
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
     
            private WorkItem[] workitems = new WorkItem[]{};
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            public WorkItem[]  WorkItems
            {
                get {
     
                    return workitems; 
                }
                set
                {
                    workitems = value;
     
                    //// do stuff
                    ////recuperation dans la prop Items du combo pour affichage
                    foreach (var item in workitems)
                    {
                        this.Items.Add(item.Name);
     
                    }
                }
     
            }
     
        }
    bon code....

Discussions similaires

  1. Collection Editor avec un tableau de Tuple<Color,int>
    Par enusius dans le forum Windows Forms
    Réponses: 0
    Dernier message: 19/03/2013, 22h39
  2. [Struts-Layout] pager and collection, probleme avec sort
    Par chouchou93 dans le forum Struts 1
    Réponses: 22
    Dernier message: 27/06/2007, 13h34
  3. Collection invisible avec for each
    Par afrodje dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/04/2007, 12h08
  4. Réponses: 4
    Dernier message: 12/04/2007, 20h26
  5. PHP Editor avec PHPeclipse
    Par Miksimus dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 18/10/2006, 20h45

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