Amelioration de code: List(Of

Résolu
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 16 juin 2012 à 15:33
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 16 juin 2012 à 20:33
Bonjour,

J'ai besoin d'une precision ou amelioration de code.
Je voudrais mettre a jour ma liste chaque fois que je change le texte d'une TextBox:

Declaration de la List:
Public myProjectList As New List(Of Project)


Code que j'utilise et ca marche:
Private Sub txtCustomer_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCustomer.TextChanged
    For Each pItem As Project In myProjectList
        pItem.pCustomer = txtCustomer.Text
    Next
End Sub


Code que je voudrais utiliser (ou quelquechose de similaire), mais ca marche pas:
Private Sub txtCustomer_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCustomer.TextChanged
    myProjectList.Item(0).pCustomer = txtCustomer.Text
End Sub


Car faire une boucle FOR EACH me parait excessif.
Est-il possible de faire quelquechose de plus propre ou plus simple que ce que je fais actuellement?

Merci,
JLuc01

8 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
16 juin 2012 à 20:00
Bonjour,

Si Index=0 n'existe pas, c'est que ta collection est vide.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 20:32
Si elle n'y est pas déjà, non. Il faut passer par un Add (de mémoire). L'index 0, avec ton code, tu peux le modifier s'il existe déjà, mais pas le créer


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
16 juin 2012 à 20:33
Si Index=0 n'existe pas, c'est que ta collection est vide.

La collection peut eventuellement etre vide, mais il faut bien commencer a la remplir quelque part!
En fait, c'est tres juste...

J'ai initialiser ma List dans la Form.Load Event comme ci-dessous:
myProjectList.Add(New Project())

Et maintenant, le code avec "Item" semble marcher parfaitement.

NHenry, Droit au but, comme toujours!
Merci aussi a Casy.

A+
JLuc01
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 15:52
Pourquoi ça marche pas ?
C'est quoi le message d'erreur ?


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0

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

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
16 juin 2012 à 17:29
Bonjour,

Rapidement, si j'ai bien compris :
Tu cherches à mettre à jour le nom d'un projet, en le recherchant parmis la liste ?

Si oui, 2 solution :
- Sauvegarder son index dans une variable puis la réutiliser
- Utiliser un Dictonary(Of ...)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
16 juin 2012 à 19:13
Bonjour,

Message d'erreur:
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Pour le code suivant:
Private Sub txtCustomer_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCustomer.TextChanged
    myProjectList.Item(0).pCustomer = txtCustomer.Text
End Sub


Je ne comprends pas pourquoi il y a un probleme d'index.

Merci,
JLuc01
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 19:33
Item, il n'y a pas un s par hasard à la fin ?

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
16 juin 2012 à 20:04
En fait non, "Items" is not a member of System.Collections.Generic.List(Of...
Ce n'est peut-etre pas possible de mettre directement la donnee (le string 'txtCustomer.Text') dans ma List???

JLuc01
0
Rejoignez-nous