2010-03-02 4 views
5

J'ai créé un contrôle utilisateur dans une application Windows C# 3.5 et il possède un certain nombre de propriétés (chaîne, int, couleur, etc.). Ceux-ci peuvent être modifiés dans la fenêtre des propriétés et les valeurs sont conservées sans problème.L'application .Net WinForm ne conserve pas une propriété de type Liste <MyClass>

Cependant, j'ai créé une propriété comme

public class MyItem 
    { 
     public string Text { get; set; } 
     public string Value { get; set; } 
    } 

    public class MyControl : UserControl 
    { 
     public List<MyItem> Items { get; set; } 
    } 

La boîte de dialogue Propriétés me permet d'ajouter et de supprimer ces articles, mais dès que je ferme la boîte de dialogue les valeurs que je saisis seront perdus.

Qu'est-ce qui me manque? Merci beaucoup!

+0

Persister modifications Design-temps/modifications dans la fenêtre Propriétés d'un objet personnalisé, je crois que vous aurez besoin de mettre en œuvre un TypeConverter, et je pense que vous voudrez probablement hériter de ExpandableObjectConverter à vous donner un meilleur ui dans la fenêtre Propriétés. – BillW

Répondre

2

Vous devez initialiser les éléments afin qu'un auto getter/setter ne vous aide pas ici.

Essayez

public class MyControl : UserControl 
{ 
    private List<MyItem> _items = new List<MyItem>(); 

    public List<MyItem> Items 
    { 
     get { return _items; } 
     set { _items = value; } 
    } 
} 
+2

Il n'est pas nécessaire de créer une variable privée pour cela. Il peut continuer à utiliser la propriété auto get; définir la notation, mais il aurait alors besoin d'initialiser 'Items = new List ();' dans un constructeur par défaut pour le UserControl – Nick

+1

Il y a une jolie réponse "suspecte". Il est très douteux que cela aurait * tout * effet * du tout *. Note aux lecteurs: YMMV - plus que d'habitude. –

Questions connexes