OVH Cloud OVH Cloud

Combobox : détecter ajout/retrait élément

40 réponses
Avatar
Gloops
Bonjour tout le monde,

Est-ce qu'un ComboBox (ou un ListBox, j'imagine que la r=E9ponse est la=20
m=EAme) d=E9clenche un =E9v=E9nement lorsqu'on lui ajoute un =E9l=E9ment =
(Items.Add)=20
ou qu'on en retire un (Items.Remove), ou doit-on g=E9rer soi-m=EAme un=20
delegate ?

Dans le premier cas je suis pass=E9 devant sans voir ...

10 réponses

1 2 3 4
Avatar
Christophe Lephay
"Gloops" a écrit dans le message de groupe de
discussion : ODu14v$

A ce qu'il m'a semblé, il faudra utiliser un objet d'accès aux données



Comme je le disais, c'est la bindinglist qui se charge des notifications sur
l'ajout ou la suppression. Si c'est ce qui t'intéresse, pas besoin de code
supplémentaire.

Un simple BindingList<string> te permet par exemple d'intercepter les
évènements d'ajout et de suppression d'éléments dans ta listbox.

BindingList<string> ma_liste = new bindingList<string>();
ma_liste.ListChanged += MonEventHandler;
ma_listbox.DataSource = ma_liste;

...

ma_liste.Add("une string");
ma_liste.RemoveAt(0);

Les deux dernières instructions vont ajouter et supprimer un item dans la
liste, en notifié tous les contrôles qui y sont bindés (ma_listbox, en
l'occurrence) et appeler MonEentHandler.

... de type objet.



Euh je comprends pas trop ce "type objet".

Donc, implémenter du code.

Plus élégant, mais pas forcément plus compatible avec le poil dans la
main.



Tout dépend de ce que tu veux faire. Dans tous les cas, si tu veux faire
quelque chose qui n'est pas déjà totalement intégré, ça fera toujours moins
de boulot si tu te sers de ce qui existe déjà.
Avatar
Gloops
Tu veux dire que je devrais trouver la BindingList directement dans la
boîte à outils ?

Dans la catégorie Data j'ai DataSet, DataGridView, BindingSource,
BindingNavigator, et ReportViewer.

Lors de la création d'un DataSet, les types de sources de données
acceptés sont Database, Web Service et Object.

Je choisirais bien Text, mais c'est là que la solution que je vois pass e
par définir un objet qui ouvre sur du texte.

En te lisant j'ai l'impression de m'être trompé quelque part ...

________________________________________________
Christophe Lephay a écrit, le 26/11/2008 20:46 :
"Gloops" a écrit dans le message de group e
de discussion : ODu14v$

A ce qu'il m'a semblé, il faudra utiliser un objet d'accès aux don nées



Comme je le disais, c'est la bindinglist qui se charge des notification s
sur l'ajout ou la suppression. Si c'est ce qui t'intéresse, pas besoi n
de code supplémentaire.

Un simple BindingList<string> te permet par exemple d'intercepter les
évènements d'ajout et de suppression d'éléments dans ta listbox .

BindingList<string> ma_liste = new bindingList<string>();
ma_liste.ListChanged += MonEventHandler;
ma_listbox.DataSource = ma_liste;

....

ma_liste.Add("une string");
ma_liste.RemoveAt(0);

Les deux dernières instructions vont ajouter et supprimer un item dan s
la liste, en notifié tous les contrôles qui y sont bindés (ma_lis tbox,
en l'occurrence) et appeler MonEentHandler.

... de type objet.



Euh je comprends pas trop ce "type objet".

Donc, implémenter du code.

Plus élégant, mais pas forcément plus compatible avec le poil da ns la
main.



Tout dépend de ce que tu veux faire. Dans tous les cas, si tu veux fa ire
quelque chose qui n'est pas déjà totalement intégré, ça fera toujours
moins de boulot si tu te sers de ce qui existe déjà.


Avatar
Jérémy Jeanson
Bonjour tout le monde :)

@ Gloops :
Je ne vois pas où tu vois que Christophe parle de wizard ou boîte à
outils? il a juste présenté l'usage du type BindingList. Donc au passage
il te conseil d'utiliser ce type à la place d'un List<String> ou
String[] avec en plus la possibilité d'ajouter des events à cette liste.
j'aime bien l'idée :)

@ Christophe:
Un grand merci pour tes explication sur le bindingList que je ne
connaissais pas du tout. j'ai suivi avec beaucoup d'attention ta series
de messages et je dois avouer que c'est agréable de trouvé un nouveau
type :) après 6 ans de .net (j'avais certainement raté le coche dans la
msdn). En plus c'est relativement proche du Binding WPF dans un certain
sens... ça donne des idées...
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
Christophe Lephay
"Gloops" a écrit dans le message de groupe de
discussion : #
Tu veux dire que je devrais trouver la BindingList directement dans la
boîte à outils ?



No no !

Tape juste le code du dessous dans le formload, bien sur en l'adaptant un
peu !


________________________________________________
Christophe Lephay a écrit, le 26/11/2008 20:46 :
BindingList<string> ma_liste = new bindingList<string>();
ma_liste.ListChanged += MonEventHandler;
ma_listbox.DataSource = ma_liste;

....

ma_liste.Add("une string");
ma_liste.RemoveAt(0);




Avatar
Christophe Lephay
"Jérémy Jeanson" a écrit dans le message de groupe
de discussion :
@ Christophe:
Un grand merci pour tes explication sur le bindingList que je ne
connaissais pas du tout. j'ai suivi avec beaucoup d'attention ta series de
messages et je dois avouer que c'est agréable de trouvé un nouveau type :)
après 6 ans de .net (j'avais certainement raté le coche dans la msdn). En
plus c'est relativement proche du Binding WPF dans un certain sens... ça
donne des idées...



Merci pour l'accueil :)

A vrai dire, je me suis mis à c# et à .net cette année et je me suis vite
retrouvé confronté à l'alternative consistant à utiliser soit les datasets,
soit une couche métier pour l'accès aux bases de données, appréciant le
degré d'intégration des datasets mais regrettant leur aspect strictement
relationnel. Du coup, j'ai décortiqué le système des bindings, dont le
mécanisme général est assez peu documenté sur msdn, je trouve.
Avatar
Gloops
Christophe Lephay a écrit, le 27/11/2008 11:48 :
Du coup, j'ai décortiqué le système des
bindings, dont le mécanisme général est assez peu documenté sur msdn, je
trouve.



Ah, voilà aussi, pourquoi en appliquant ce que j'ai appris avec les
DataSet, j'avais un doute ...

Bon, avec ce qui s'est dit aujourd'hui, je pense que je devrais trouver
le chemin :)




D'un autre côté (donc : HS), pour ma part, c'est l'affichage avec des
regroupements, aussi, (des ruptures, si vous préférez) que j'ai été
surpris de ne pas retrouver en standard dans les gridviews. Alors je
suis en train de potasser un projet que j'ai trouvé avec ça. J'ai
l'impression que ce projet gagnerait à être poussé jusqu'au
développement de composant, mais déjà comme il est on dirait qu'il peut
rendre bien service. J'attends un jour où je vais beaucoup me déplace r :
ça me fera de la lecture dans le train :)
Avatar
Delf
Jérémy Jeanson a exprimé avec précision :

Non cela n'existe pas, désolé :(

Donc oui il serrait conseillé de faire remonter les informations de
modifications par tes propres moyens.



Faire une classe qui hérite de ta collection, tu surcharges les
méthodes Add(), Remove(), ... et tu utilises des delegates + events.

--
Delf
Avatar
Jérémy Jeanson
Comme l'a indiqué Christophe sur le même sujet, on a la BindingList qui
fait déjà ce genre de chose très bien.

Ne connaissant pas ce type ma réponse de l'époque est erronée.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
Gloops
Delf a écrit, le 27/11/2008 22:32 :
Faire une classe qui hérite de ta collection, tu surcharges les mét hodes
Add(), Remove(), ... et tu utilises des delegates + events.




Bonjour,

Ah, toi aussi, tu penses aux délégués.
Mais surcharger la classe juste pour le plaisir d'écrire des délégu és
... C'est vrai qu'on peut entrevoir un intérêt si on pense avoir
beaucoup d'applications avec des listes déroulantes à synchroniser av ec
des fichiers texte.

Merci pour l'idée, je tâcherai d'y penser quand j'aurai exploité l' idée
de Christophe, sur laquelle je pense bien passer un peu de temps ce
week-end.
Avatar
Delf
Le 28/11/2008, Gloops a supposé :

Ah, toi aussi, tu penses aux délégués.
Mais surcharger la classe juste pour le plaisir d'écrire des délégués ...



Ouais, j'y ai pensé.
Sinon en C# 3.0 on ne peut pas ajouter des méthodes dans les classes du
framework ? Je ne sais plus comment ça s'appelle mais p'tre ajouter
AddWithEvent(), RemoveWithEvent(), etc... non ?

C'est vrai qu'on peut entrevoir un intérêt si on pense avoir beaucoup
d'applications avec des listes déroulantes à synchroniser avec des fichiers
texte.



Synchroniser des listes avec des fichiers texte ?
Mettre un SystemFileWatcher sur les fichiers en écoute d'écriture et
recharger les objets associés dès modification au niveau FS.

--
Delf
1 2 3 4