ByRef dans un ForEach()

Résolu
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 20 févr. 2008 à 12:02
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 20 févr. 2008 à 13:33
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

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
20 févr. 2008 à 13:18
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
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
20 févr. 2008 à 12:28
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
0
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
20 févr. 2008 à 12:34
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%" />
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
20 févr. 2008 à 12:44
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
0

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

Posez votre question
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
20 févr. 2008 à 12:54
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%" />
0
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
20 févr. 2008 à 13:33
Merci beaucoup, c'est nikel
0
Rejoignez-nous