List<> Controler les add et remove

Résolu
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009 - 7 déc. 2006 à 09:34
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009 - 7 déc. 2006 à 11:49
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.
A voir également:

9 réponses

cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
7 déc. 2006 à 11:09
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)
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 déc. 2006 à 09:42
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#]
0
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
7 déc. 2006 à 09:54
Désolé si ma réponse est bete,
 mais les méthodes add, Remove .. ne sont pas virtuels.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
7 déc. 2006 à 09:55
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 ^^)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
7 déc. 2006 à 10:04
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 déc. 2006 à 10:19
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#]
0
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
7 déc. 2006 à 10:39
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 :) )
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 déc. 2006 à 10:46
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#]
0
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
7 déc. 2006 à 11:49
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

}
0
Rejoignez-nous