IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[vb.net]indexof d'un objet dans un arraylist


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut [vb.net]indexof d'un objet dans un arraylist
    Bonsoir,

    J'ai un arraylist arRule que je rempli avec 3 objets de type clsFormat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim arRule as arraylist
     
    dim newFormat as New clsFormat("0010","TOTO")
    arRule.add(newFormat)
    dim newFormat2 as New clsFormat(("0020","TITI")
    arRule.add(newFormat2)
    dim newFormat3 as New clsFormat(("0030","TUTU")
    arRule.add(newFormat3)
    clsFormat comprend 2 propriétés
    clsFormat.MyId et clsFormat.Libel

    je sais par exemple afficher un élément de mon arraylist
    en écrivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox( DirectCast(arRule.Item(2),newFormat).Libel)
    qui me retournera "TUTU"

    mais comment trouver l'index de arRule qui contient l'objet newFormat qui à MyId ="0030"

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Utilise une list generic pour faire ce que tu veux faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     List<Class2> list = new List<Class2>();
                Class2 c0 = new Class2();
                c0.i = 0;
                Class2 c1 = new Class2();
                c1.i = 1;
                Class2 c2 = new Class2();
                c2.i = 3;
                list.Add(c0);
                list.Add(c1);
                list.Add(c2);
     
     
                int index = list.FindIndex(delegate(Class2 obj)
                {
                    return (obj.i == 1);
                });
    ceci est une anonymous method. la clé est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return (obj.i == 1);
    je retourne l'index si obj.i ==1, dans ton cas ca va etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return obj.MyId == "0030";
    biensur cela peut se faire avec un for, mais les anonymous method sont beaucoup plus puissante!!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Ok super merci,

    J'étais en VB.net et donc ton code me parait un peu comme du mandarin. Mais j'étais en train de réfléchir à utiliser un Hashtable.

    Peux-tu malgré tout m'expliquer un peu plus le delegate et l'anonymous method ?

  4. #4
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    mon delegate me créé une function "on the fly".

    Je ne connais pas assez vb.net pour te traduire mon code, je fais seulement du c#

  5. #5
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bonjour,

    Je n'aime pas trop la solution proposée, car elle est détourné de son contexte d'utilisation.

    En fait ce genre de fonction te permet de recherche dans ta liste de items bien précis.

    Ex: si tu crée un fonction (TrouveValeur0030) qui te trouve les items qui ont pour valeur "0030", cette fonction ne servira qu'à retrouver les items qui ont pour valeur "0030".

    Si tu veux rechercher une valeur différente, il te faudra créer une autre fonction (TrouveValeur0010) par exemple.

    Tu peux toutefois utiliser ce système en testant une variable.

    Faute d'avoir le temps de trouver une meilleure solution à ton problème, je te traduit le code de Shwin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private mStr_CleARechercher As String
     
    Private Sub Form1_Load( _
                            ByVal sender As System.Object, _
                            ByVal e As System.EventArgs _
                            ) Handles MyBase.Load
     
        Dim Int_Index As Integer
        Dim list As List(Of clsFormat)
     
        list = New List(Of clsFormat)
        Dim c0 As New clsFormat
        c0.MyId = 0
        Dim c1 As New clsFormat
        c1.MyId = 1
        Dim c2 As New clsFormat
        c2.MyId = 2
     
        list.Add(c0)
        list.Add(c1)
        list.Add(c2)
     
        mStr_CleARechercher = "0030"
        Int_Index = list.FindIndex(AddressOf TrouveCle)
    End Sub
     
    Private Function TrouveCle(ByVal obj As clsFormat) As Boolean
        Return obj.MyId = mStr_CleARechercher
    End Function

  6. #6
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par Kelpan
    Bonjour,

    Je n'aime pas trop la solution proposée, car elle est détourné de son contexte d'utilisation.

    En fait ce genre de fonction te permet de recherche dans ta liste de items bien précis.
    Tu fais la meme chose que moi sauf dans une methode non anonyme

    Je peut tout simplement créé une variable externe a la méthode et l'utiliser a l'intérieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int Recherche = 12;
    int index = list.FindIndex(delegate(Class2 obj)
                {
                    return (obj.i == Recherche );
                });
    J'aime mieux les anonymous method, car ceci ne te crée pas une function inutile et ne pollue pas le code pour rien!!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci à tous deux pour votre implication.

    Comme vous le savez, c'est le SortedList que j'ai mis en application avec succès.

    Merci encore

  8. #8
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    J'aime mieux les anonymous method, car ceci ne te crée pas une function inutile et ne pollue pas le code pour rien!!
    Dommage qu'il n'y est pas d'équivalent en VB...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. trier une liste d'objets dans une ArrayList
    Par sandrine49 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2008, 08h59
  2. Réponses: 4
    Dernier message: 19/06/2007, 10h41
  3. [vb.net]modifier un objet dans un arrayList
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/10/2006, 13h23
  4. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  5. [VB.NET] accessibilité d'un objet dans un TAG
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/12/2005, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo