Bonjour,

Je mets plusieurs classe "Personne" dans ma combo.
Dans une fonction je passe l'item sélectionné en Byval et dans la fonction je modifie les valeurs.
La logique veut qu'en passant un paramètre en ByVal à la sortie de la fonction celui n'est pas modifié.
Sauf que là ce n'est pas le cas.

Si on rappel l'item sélectionné celui a changé de valeur.


Le code ci-dessous n'a aucun intérêt sauf à servir de démo

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
31
32
33
34
35
36
37
38
39
40
41
42
43
 
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim p As Personne
 
        p = New Personne
        p.nom = "AAAAA"
        p.prenom = "BBBBB"
        MyCombo.Items.Add(p)
        p = Nothing
 
        p = New Personne
        p.nom = "CCCCC"
        p.prenom = "DDDDDD"
        MyCombo.Items.Add(p)
        p = Nothing
    End Sub
 
    Private Function DEMO_DU_ByVal(ByVal pers As Personne) As String
        pers.nom = "Erreur1"
        pers.prenom = "Erreur2"
        Return "ok"
    End Function
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(DEMO_DU_ByVal(CType(MyCombo.SelectedItem, Personne)))
        MessageBox.Show(CType(MyCombo.SelectedItem, Personne).ToString)
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MessageBox.Show(CType(MyCombo.SelectedItem, Personne).ToString)
    End Sub
End Class
 
Public Class Personne
    Public nom As String = ""
    Public prenom As String = ""
 
    Public Overrides Function ToString() As String
        Return nom & " " & prenom
    End Function
End Class
Alors normal ou est-ce un bug ?