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

Framework .NET Discussion :

[C# 2.0/VS2005] CollectionEditor


Sujet :

Framework .NET

  1. #1
    Membre actif
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut [C# 2.0/VS2005] CollectionEditor
    Salut,

    J'ai un component qui a une propriété de type "SortedList", et j'aimerais savoir s'il y a moyen de pouvoir modifier le contenu de la collection via la fenêtre de propriété. Actuellement, on dirait que l'éditeur de collection de VS2005 ne me permet pas de modifier / ajouter / enlever des élélments d'une collection de type SortedList...

    Dois-je me créer ma propre classe, genre SortedListEditor qui dérive de CollectionEditor et faire je sais pas quoi? Si quelqu'un peu m'aider, je nage dans le néant.

    D'ailleurs j'ai plein d'autres questions concernant les editeurs de propriété personnalisés... yaurait pas des bonnes ressources sur le sujet, bien caché qqpart? j'en ai vu mais la plupart des trucs sont de base ou ne s'applique pas à ce que je veux faire soit permettre d'associer pour un objet spécifique sa propriété X qui est de type Classe1 à l'aide d'un ComboBox qui est remplit/bindé à une collection d'objet de type Classe1, et dont cette collection est en fait la propriété d'un component dans mon projet. Est-ce que je suis clair?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  3. #3
    Membre actif
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut
    Merci, mais bien que ce soit très pratique pour certains points, ça ne couvre pas vraiment ce que je désire.

  4. #4
    Membre actif
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut
    J'ai résolu mon problème.

    J'ai créer d'abord une interface, de laquelle hérite les objets ayant une propriété qui peut être définit à partir d'une collection qu'il possède.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        interface IListEditable
        {
            IEnumerator ParentCollection { get; }
            object ChosenItem { get; set;}
        }
    Ensuite j'ai fait une form pour permettre d'afficher les éléments de la collection et de choisir l'item. (Une simple forme avec listbox et bouton ok et annuler)

    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
     
        public partial class frmCollectionItemSelection : Form
        {
            public frmCollectionItemSelection(IEnumerator enumerator, object value, bool multipleselection)
            {
                InitializeComponent();
     
                if (multipleselection)
                    listBox1.SelectionMode = SelectionMode.MultiExtended;
                else
                    listBox1.SelectionMode = SelectionMode.One;
     
                enumerator.Reset();
                while (enumerator.MoveNext()) 
                {
                    listBox1.Items.Add(enumerator.Current);
                } 
     
                listBox1.SelectedItem = value;
            }
     
            public ListBox.SelectedObjectCollection SelectedItems
            {
                get { return listBox1.SelectedItems; }
            }
     
            public object SelectedItem
            {
                get { return listBox1.SelectedItem; }
            }
     
            private void cmdOK_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
     
            private void cmdAnnuler_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
     
        }
    Puis finalement j'ai fait le type editor pour la propriété:
    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
     
        class UIListEditableEditor : UITypeEditor
        {
     
            public override UITypeEditorEditStyle  GetEditStyle(ITypeDescriptorContext context)
            {
                 return UITypeEditorEditStyle.Modal;
            }
     
            public override object  EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
            {
                if (provider != null)
                {
                    IWindowsFormsEditorService editor = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
                    if (editor != null)
                    {
                        IListEditable t = context.Instance as IListEditable;
                        frmCollectionItemSelection e = new frmCollectionItemSelection(t.ParentCollection, value, false);
                        editor.ShowDialog(e);
                        value = e.SelectedItem;
                        e.Dispose();
                    }
                }
                return value;
     	    }       
        }
    Donc supposons deux classes: Class1 quelconque et Class2 qui est liée à un component contenant une collection de class1 et qui a une propriété ItemChoisi de type Class1 qu'on veut assigné à partir de la collection dans le component...
    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
     
    public class Class2 : IListEditableEditor
    {
       private Class1 m_ItemChoisi;
       private MonComponent m_ComponentContenantTousLesItems;
     
      [Editor(typeof(UIListEditableEditor), typeof(System.Drawing.Design.UITypeEditor))]
       public Class1 ItemChoisi
       {
             get { return m_ItemChoisi; }
             set { m_ItemChoisi = value; }
       }
     
       public MonComponent ComponentContenantTousLesItems
      {
            get { return m_ComponentContenantTousLesItems; }
            set { m_ComponentContenantTousLesItems = value; }
      }
     
      [Browsable(false)]
      public  IEnumerator ParentCollection 
      { 
               get { return m_ComponentContenantTousLesItems.LesItems.GetEnumerator(); }
       }
     
      [Browsable(false)]
       object ChosenItem 
       { 
              get { return m_ItemChoisi; }
              set { m_ItemChoisi = (Class1)value ;}
        }
     
     
    }

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

Discussions similaires

  1. [VB.NET, VS2005] utilisation du CollectionEditor
    Par filouc dans le forum Framework .NET
    Réponses: 4
    Dernier message: 17/10/2007, 10h38
  2. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15
  3. Réponses: 5
    Dernier message: 13/11/2005, 19h10
  4. [VS2005][C#] Delete sur un Dataset typé
    Par Xno dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/09/2005, 18h13

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