Structure (type) - Gestion dynamique d'une structure (suite)

Signaler
Messages postés
9
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
23 janvier 2009
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Après avoir récupérer dynamiquement le nom des variables d'une structure, merci à nouveau Willy, je veux alimenté cette structure toujours dynamiquement. Ci-dessous le code que j'ai bâti. Le "SetValue" ne fonctionne pas. En revanche le "GetValue" fonctionne.
Peut-on me dire ce qui ne va pas ?

Merci

Le Code

Les déclarations.
Imports
System.Reflection
Structure MyStructure
Dim IsOk As Boolean
Dim MonTexte As String
Dim CoordXY As Double
Dim MonTab leau As ArrayList
End Structure

Utilisation :
Dim Msg As String
= ""
Dim A As
MyStructure
A.MonTexte = "Ancienne valeur"
MsgBox("1 - " & A.MonTexte)

Dim t As Type = GetType
(MyStructure)
For Each field As FieldInfo In
t.GetFields()
Msg = Msg & field.Name & " - (" & field.FieldType.Name & ")" & vbCrLf
If field.Name = "MonTexte" Then

MsgBox("2 - " & field.GetValue(A))
field.SetValue(A, "New Value")
MsgBox("3 - " & field.GetValue(A))
End If

Next
MsgBox("4 - " & Msg & vbCrLf & vbCrLf & A.MonTexte)



1 réponse

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Salut ^^
A la place de ta structure utilise plutot une classe que tu vas instancier.
Dans cette classe tu va placer les mêmes variables que tu utilisés dans ta structure
Assez parlé...voici un exemple

8<---------------------------------------------------------------------------------

Imports System.Reflection


Public
Class Form1



Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click


Dim myObj
As
New TestStructure()

Dim t
As Type =
GetType(TestStructure)

'Cherche les objets private et qui requiert une instance
For
Each field
As FieldInfo
In t.GetFields(BindingFlags.NonPublic
Or BindingFlags.Instance)

'Affiche les valeurs
MessageBox.Show(field.Name &
": " & field.GetValue(myObj).ToString)



'Change les valeurs des variables MonTexte et CoordXY
Select
Case field.Name

Case
"MonTexte"
field.SetValue(myObj,
"Nouveau texte")
MessageBox.Show(
"Nouvelle valeur de " & field.Name &
": " & field.GetValue(myObj).ToString)

Case
"CoordXY"
field.SetValue(myObj,
New Point(25, 78))
MessageBox.Show(
"Nouvelle valeur de " & field.Name &
": " & field.GetValue(myObj).ToString)

End
Select

Next

End
Sub

End
Class



''' <summary>Classe qui remplace ta structure</summary>
''' <remarks>Test</remarks>
Public
Class TestStructure

Private IsOk
As
Boolean
Private MonTexte
As
String
Private CoordXY
As Point

Private Tableau
As ArrayList

Public
Sub
New()


'Je leur donne des valeurs pour pouvoir tester
IsOk =
True
MonTexte =
"Ancien texte"
CoordXY =
New Point(10, 15)
Tableau =
New ArrayList()

End
Sub

End
Class

Voila