Identifier la valeur d’un listbox

Fermé
julie - 28 mars 2020 à 09:23
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 - 28 mars 2020 à 13:37
Bonjour tout le monde.
Je suis entrain de travailler sur une application de gestionnaire de contact. J’ai un listbox qui contient les informations du contact. Je souhaites faire des opérations sur le contact sélectionné (comme modifier et supprimer) par l’utilisateur.
Je sais qu’on peut le faire avec listbox.Items.CurrentContent. Sauf que dans mon application les infos sont également ajoutées dans un fichier texte, pour les conserver. Donc je dois faire des opérations sur le fichier text.

Alors ma question, comment récupérer l’item sélectionné par l’utilisateur et faire des opérations sur mon fichier texte en fonction de l’item sélectionné ? (Afin que le résultat soit persistant?)

Merci d’avance de votre aide !

2 réponses

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
28 mars 2020 à 10:04
Bonjour

Tu n'as pas précisé quelque type d'interface tu utilises, comme tu parles de CurrentContent, je suppose qu'il s'agit de WPF

La bonne méthode en C# consisterait
  • à écrire une classe Contact.
  • à binder une collection de cette classe sur ta ListBox et bindé la partie de l'interface qui fait "les opérations sur les contact" à la propriété SelectedItem de la listbox.
  • Une fois qu'un contact est modifié tu écris tout le fichier texte (classe File, WriteAllText ou WriteAllLine...). Sauf si le fichier est vraiment très gros (au delà de quelques dizaines de Mo je dirais), dans ce cas il faut aller écrire en binaire juste les bytes nécessaires.


J'ai fait un petit tuto sur ça en Winform (justement avec des contacts...)
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
ou en WPF (mais cette fois c'est une équipe sportive)
https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf

Pour le tuto WPF, je parle un peu du pattern MVC, mais en WPF on peut aussi aisément appliquer le patterm MVVM. Quoiqu'il en soit WPF "exige" de coder objet, c'est un peu moins vrai en Winform.
1
Merci beaucoup pour ton intervention !
Oui j’utilise une List<> de Contact pour mes contacts, et wpf pour mes interfaces graphiques.
J’arrives à supprimer le contact de la listbox, mais pas au niveau du fichier text. Donc quand je sors et re test l’application le contact supprimé est toujours présent dans la listbox.
Je voudrais récupérer les valeurs de l’élément sélectionné et la supprimer de ma List<Contact>.
J’ai créé un Id dans ma classe Contact que j’incremente dans le constructeur, malheureusement cette classe est initialisée à chaque a fois que je clique sur le bouton permettant de créer un nouveau contact. Donc l’ID n’est pas toujours le même.

Je cherche maintenant une autre alternative sans passer par l’ID. Ou faire en sorte que l’ID ne change pas.
Comment mettre à jour ma liste de contact, à partir de l’item sélectionné dans ma listbox.
Pour écrire dans la listbox j’ai parcouru la liste et :


listbox.Items.Add(contact.Nom + " " + contact.Prenom + " " ) etc...


Merci d’avance !
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 928
28 mars 2020 à 13:37
Si tu avais lu les liens que je t'ai donné, tu aurais vu que jamais il n'y a de Add.

Avec le binding, il n'y a qu'une seule source de données : la collection, la listbox ne fait que l'afficher.
Avec ta méthode, tu as au moins 2 sources de données, et donc tu dois gérer toutes les mises à jour dans les 2 sens, bref coder comme dans les années 90 quand les langages de l'époque ne permettaient pas de faire mieux et plus simple.
Ça fait longtemps que j'ai laissé ça derrière moi, et je n'ai pas envie de m'y remettre.

Si tu ne comprends les tutos, je prendrai le temps de détailler, mais je ne m'embêterais pas à t'expliquer comment ne pas utiliser correctement WPF.
0