-
arraylist et contains
Bonjour
Je vais essayer d’expliquer brièvement le contexte de mon problème : j’ai une classe Médecin, une classe Spécialité, une Arraylist de médecins (listemed) et une Arraylist de spécialités (listespe). Chaque médecin pratique au moins une spécialité. Ainsi, chaque instance de ma classe médecin possède un tableau contenant les spécialités pratiquées par le médecin considéré.
Je voudrais afficher :
- dans une listbox les noms des spécialités qu’il pratique (ça, pas de problème)
- dans une autre listbox les noms du reste des spécialités, celles qu’il ne pratique pas afin que l’utilisateur puisse les faire basculer d’une listbox à l’autre.
Le principe que je voudrais appliquer est le suivant : une fois un médecin sélectionné, on extrait du tableau chacune des spécialités qu’il pratique, et on efface un à un leur homologue dans la liste des spécialités restantes (qui est complète au départ). Voici une partie de mon code :
' on crée une nouvelle liste de spécialités, celles qui ne sont pas pratiquées par le médecin
Dim listespedispo As New GestionSpec
listespedispo.charge() ' au départ, elle contient toutes les spécialités : on la remplit à partir de la base de données
Dim i As Integer ' compteur
' on crée une instance de Médecin à partir de la sélection effectuée dans la listview
Dim med As New Medecin
Try
med = listemed.renvoieElement(indexmed)
' on parcourt le tableau du médecin considéré pour récupérer les spécialités qu'il pratique
For i = 0 To med.nbspe – 1
‘ on crée alors une instance de Spécialité
Dim special As New Specialite
special = med.specialite(i)
' et on la retire dans la liste des spécialités restantes
If listespe.Lspe.Contains(special) Then
listespedispo.Lspe.Remove(special)
Else
MsgBox(med.specialite(i).leNom & " n'a pas été trouvée dans la liste de spécialités.")
End If
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Erreur : ")
End Try
Le problème, c’est que l’instruction Remove ne supprime rien. J’ai alors essayé de rechercher la spécialité avec Contains pour vérifier d’abord si on la trouve, mais impossible de la trouver dans l’autre liste alors qu’elle y est, je l’ai vérifié. Je ne comprends pas pourquoi, j’ai pourtant vérifié que je comparais bien deux objets du même type : Spécialité, et c’est le cas.
Je sèche, quelqu’un aurait une idée ??
Merci d’avance…
-
je trouve que tu te casse la tete pour pas grand chose, perso, j'aurai rajouté un booléen dans ton tableau des specialités
true = il pratique
false = il ne pratique pas
ainsi tu verifie les booléen du tableau pour remplir tes listes, et en cas de changement, tu ne modifie qu'un booléen.
Je suis d'accord que ca ne fait pas vraiment objet, mais au moin c'est simple et clair...
-
Effectivement, mais ça m'obligerait à modifier pas mal de trucs maintenant.:?
Finalement, j'ai trouvé une autre solution, avec une seule listbox en multiselect, qui contient toutes les spécialités. J'y sélectionne automatiquement celles qui sont pratiquées par le médecin en cours.
J'utilise quand même un contains, mais qui fonctionne celui-là! En fait, je l'utilise sur la listbox et non plus sur l'arraylist :
- je charge l'arraylist de spécialités et j'affiche les noms dans la listbox, normal jusqu'ici.
- ensuite, je prends chaque spécialité du médecin, j'en extrais le_nom et je regarde si : listbox.items.contains(le_nom)
Du coup, après modif ou pas, je peux récupérer les indexes sélectionnés dans la listbox, qui sont les mêmes que dans l'arraylist pour les traitements ultérieurs.
J'espère que je suis assez clair...:roll:
C'est un peu alambiqué mais je trouve que le résultat est sympa, visuellement. Non seulement ça marche mais au niveau ergonomie, ça m'arrange !!
Merci quand même!
-
n'oubli pas le tag resolu stp
-