List<> Controler les add et remove [Résolu]

Signaler
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009
-
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009
-
Salut,





J'ai une une list generic et j'aimerai contrôler les add et remove,
soit en dérivant ma classe soit en poussant un evenement sur
suppression dans ma liste ou suppression... mais je sais pas comment
faire.

Avez vous un tuto sur le sujet ou un breve exemple?

Merci

NB : Pourquoi ca? Pourajouter ou supprimer dans une table de données, ceci avec un propertygrid qui doit passer ces méthodes la pour ajouter ou supprimer un élément d'une collection.

9 réponses

Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

MERCI!!!

En faite, c'est sur IList<T> qu'il faut implémenter... et la c'est le top (IList est au dessus et contient ICollection)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
tu peux hériter la classe List<> et surcharger les méthodes Add, Remove, AddRange...
tu pourras ainsi ajouter des évènements :)

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

Désolé si ma réponse est bete,
 mais les méthodes add, Remove .. ne sont pas virtuels.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
comme sebmafate, et je rajouterais que tes evenements devraient se baser sur le modele validating par exemple, c'est a dire que tu ferais une surcharge du style :

protected override void Add(T Item)
{
OnAdding(new AddEventArgs);
base.Add(Item);
}

Et dans ton event adding, un argument cancel qui te permette de valider ou non l'ajout (enfin un truc du genre quoi ^^)
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

public



class



ListeReduct
<T> :

List
<T>

where
T:

IReduct

{


 public
ListeReduction(){}


 protected



override



void
Add(T Item)
 {


    base
.Add(Item);
 }
}

J'ai une erreur et ca viens du fait que add n'est pas virtuel
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
tu as toujours la possibilité de faire ceci :

public new int Add(T item) {
   return base.Add(item);
}

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

Le truc, c'est que j'utilise un propertygrid qui gere l'objet "PropertyProd".
Cet objet contient une propriété "ListReduct" (juste au dessus), et je veux lancer quelque chose quand j'ajoute ou supprime avec le gestionnaire de collections du propertygrid.... mais meme en masquant les Add, AddRange, Insert, InsertRange, j'ai aucune de ces méthode qui se lance (test avec un MessageBox)

Mais je m'y prends sans doute mal (si je m'y prennais bien, ca marcherai :) )
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
ok...
ce que tu peux faire, c'est implémenté l'interface ICollection<T>

Tu auras ainsi tout controle sur ta collection.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

En faite, j'apporte correction :

Pour le propertygrid, il faut simplement dériver de IEnumerable<T> :

Voila, ce que j'ai fait :

public
class
ListeReduction<T> :
List<T>,
IEnumerable
where T:
IReductions{

#region IEnumerable Membres

IEnumerator
IEnumerable.GetEnumerator(){

foreach (T p
in
this){

MessageBox.Show(
"Opération");

yield
return p;}

}

#endregion

}