ByRef dans un ForEach()

Résolu
Signaler
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010
-
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010
-
Bonjour,
Je voudrais parcourir tout ma liste "LesClients" alors qu'elle est souvent modifiée (je ne peux donc pas faire un FOR normal)
Je fais donc via la fonction ForEach mais je n'arrive pas a passer l'information en ByRef pour que ma fonction "BoucleGetDataFromClients" puisse modifier les informations de ma liste.

Avez-vous une idée pour y arriver ?

Merci d'avance
<hr size="2" width="100%" />    Private Sub GetDataFromClients()
        While True
            LesClients.ForEach(AddressOf BoucleGetDataFromClients)
        End While
    End Sub

    Sub BoucleGetDataFromClients(ByRef who As Client_format)
        Dim readbuf As Byte() = New Byte(1024) {}
       (....)
<hr size="2" width="100%" />

6 réponses

Messages postés
14847
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
160
Bonjour

A la place de :
LesClients(who).Name=DataIn(1)

Je te conseille :
Dim lClient as Client_format=LesClients(who)
lClient.Name=DataIn(1)
LesClients(who)=lClient

là ça devrait marcher, je n'ai pas prévu ce cas, car je bosse surtout avec des classes.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
14847
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
160
Bonjour

Je ne connaissait pas cette syntaxe, LesClients est un tableau de structure ou de classe ?
Sinon, il y a le bon vieux :

For i as integer=0 to LesClients.GetUpperBound(0)
    With LesClients(i)
          .....
    End with
Next I

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

voici la définition des variables, je vais tester ton bout de code.

<hr size="2" width="100%" />    Public Structure Client_format
        Public Socket As Socket
        Public Name As String
        Public Level As Level
    End Structure

    'Private SocketServer As Socket
    Private LesClients As List(Of Client_format) = New List(Of Client_format)
<hr size="2" width="100%" />
Messages postés
14847
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
160
Bonjour

Dans le cas du List(Of...) La boucle change un peu :

For i as integer=0 to LesClients.Count-1

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

ca avance, je sais parcourir sans erreur mais je ne peux pas modifier une des variables
quand je veux faire LesClients(who).Name = DataIn(1) il me dit : "Cette expression est une valeur et ne peut donc pas être la cible d'une assignation."

je ne comprend pas ...

<hr size="2" width="100%" />    Private Sub GetDataFromClients()
        While True
            For who As Integer = 0 To LesClients.Count - 1
                Dim readbuf As Byte() = New Byte(1024) {}
                Dim DataFromClient As String = ""
                Dim nbr_char As Integer

                'on prend l'information
                nbr_char = 0
                Try
                    nbr_char = LesClients(who).Socket.Receive(readbuf)
                    DataFromClient = Encoding.ASCII.GetString(readbuf)
                Catch ex As Exception
                End Try
                If nbr_char > 0 Then
                    ListBox.Invoke(dlgDisplay, LesClients(who).Name + " say : " + DataFromClient)
                    Dim Splitter As Regex = New Regex("\|\#\|")
                    Dim DataIn As String() = Splitter.Split(DataFromClient)

                    If DataIn(0) = "HELLO" Then
                        LesClients(who).Name = DataIn(1)
                    End If
                End If
            Next
        End While
    End Sub
<hr size="2" width="100%" />
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

Merci beaucoup, c'est nikel