Objekte einer Structure durchlaufen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Objekte einer Structure durchlaufen

    Hallo,

    weiß einer von euch vielleicht auf die schnelle wie ich alle Objekte einer Structure in einer Schleife durchlaufe.
    (Muss keine Schleife sein)

    Meine Structure sieht so aus

    VB.NET-Quellcode

    1. Private Structure meinObjekt
    2. Public Name As String
    3. Public Value As String
    4. Public Beschreibung As String
    5. End Structure

    Da ich alle Objekte in einer Liste aufführen will, ich aber nicht jedesmal den Code erweitern will wenn ein neues Objekt hinzukommt.
    Hab ich mir gedacht, geh ich einfach mal alle Objekte durch.

    Danke

    mikeb69
    Hi
    Versuchs mal so:

    VB.NET-Quellcode

    1. Public Function GetContent(ByVal Instance As Object) As String()
    2. Dim fields As Reflection.FieldInfo() = Instance.GetType.GetFields(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
    3. Dim values(fields.Length - 1) As String
    4. For i As Integer = 0 To fields.Length - 1
    5. values(i) = fields(i).GetValue(Instance).ToString
    6. Next
    7. Return values
    8. End Function


    Edit: fields(i) hat auch noch andere Eigenschaften und Funktionen. Beispielsweise den Namen. Wenn du andere Typen auch herausfinden willst, kannst du GetMembers statt GetFields aufrufen.

    Gruß
    ~blaze~
    Hallo FATheone,

    das ist mir auch klar - deswegen müsste ich nicht Fragen.

    Das Problem ist - wenn man es Problem nennen kann - dass ich nicht weiß ob die Structure so schon fertig ist.
    Ich möchte alle Werte der Structure in einem ListView anzeigen und dafür eine Funktion schreiben.
    Da ich aber nicht ständig an der Funktion rumfummeln will, nur weil sich an der Structure etwas ändert, hab ich gefragt ob das automatisch geht.

    Es geht.
    Mir war auch klar das es geht - nur war ich nicht in der Lage das so schnell hinzubekommen.

    Hier mal das Ganze aus meinem Projekt heraus.
    Die Structure

    VB.NET-Quellcode

    1. Private Structure meinObjekt
    2. Public Name As String
    3. Public Value As String
    4. Public Beschreibung As String
    5. Public children As Integer
    6. End Structure

    Eine Instanz davon fülle ich und leg diese in der Tag-Eigenschaft aller TreeView-Nodes ab.
    (Immer mit anderen Werten natürlich)
    Sobald der Node selektiert wird, lese ich die Structure aus der Tag-Eigenschaft aus und stelle sie im ListView dar.

    Hier der Code für die Anzeige

    VB.NET-Quellcode

    1. Private Sub TreeViewMainView_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeViewMainView.AfterSelect
    2. Dim n As TreeNode = e.Node
    3. If n.Tag IsNot Nothing Then
    4. Dim temp As meinObjekt = CType(n.Tag, meinObjekt)
    5. Dim ret()() As String = GetContent(temp)
    6. Me.ListViewDetailView.Items.Clear()
    7. For i As Integer = 0 To ret(i)(0).Length - 1
    8. Me.ListViewDetailView.Items.Add(ret(0)(i)).SubItems.Add(ret(1)(i))
    9. Next
    10. End If
    11. End Sub
    12. Private Function GetContent(ByVal Instance As Object) As String()()
    13. Dim fields As Reflection.FieldInfo() = Instance.GetType.GetFields(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
    14. Dim values(fields.Length - 1) As String
    15. Dim ret(fields.Length - 1) As String
    16. For i As Integer = 0 To fields.Length - 1
    17. values(i) = fields(i).GetValue(Instance).ToString
    18. ret(i) = fields(i).Name.ToString
    19. Next
    20. Return New String()() {ret, values}
    21. End Function

    Habs noch ein wenig umgebaut, da ich die Namen der Objekte auch haben wollte.
    (Der Code kann sicher noch optimiert werden - vor allem wegen meiner Änderungen)

    NACHTRAG:
    So könnte man auch bei einem selbstgebauten Datei-Explorer agieren.
    Wenn es heisst Dateien bzw. Ordner und deren Eigenschaften im ListView darzustellen. ;)

    Gruss

    mikeb69