Array von Objekten

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Clemens.

    Array von Objekten

    Hallo!

    Ich möchte gerne zur Laufzeit Objekte erzeugen und in einer ArrayList speichern.
    Eine ArrayList deshalb, weil die Reihenfolge später noch umsortiert werden kann.

    VB.NET-Quellcode

    1. Public Class BildElement
    2. Public Init As Integer
    3. Public FileName As String
    4. End Class
    5. Public Class Form1
    6. Dim col As New ArrayList
    7. Dim count As Integer = 0
    8. Dim Instanzen() As BildElement
    9. Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    10. For Each bla As String In OpenFileDialog1.FileNames
    11. count = count + 1
    12. Instanzen(count) = New BildElement()
    13. Instanzen(count).Init = count
    14. Instanzen(count).FileName = bla
    15. col.Add(Instanzen(count))
    16. Next bla
    17. End Sub
    18. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    19. OpenFileDialog1.Title = "Bilder auswählen"
    20. OpenFileDialog1.Multiselect = True
    21. OpenFileDialog1.Filter = "Bilddateien(.jpg)|*.jpg|Alle Dateien|*.*"
    22. OpenFileDialog1.ShowDialog()
    23. End Sub
    24. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    25. End Sub
    26. Private Sub moveUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles moveUp.Click
    27. Dim stelle As Integer
    28. stelle = ListBox1.SelectedIndex
    29. col.Insert(stelle - 1, col(stelle))
    30. col.RemoveAt(stelle + 1)
    31. AktualisiereList()
    32. End Sub
    33. End Class


    Leider speichert er aber nichts ab und es passiert garnichts wenn ich Bilder auswähle.

    Kann mir da jemand weiterhelfen?
    1. Warum hast du sowohl Array alsauch ne ArrayList?!
    2. Musst du die ArrayList in der Sub New oder in Form_Load erst instanziieren: col = new ArrayList()

    Die Vorzüge der ArrayList (entgegen dem Array) bestehen Hauptsächlich darin, dass man an keinen Typen gebunden ist, das ganze recht gut gemanaged wird (einfach!) und es sich dennoch im ein Array handelt.

    Mad Andy schrieb:

    1. Warum hast du sowohl Array alsauch ne ArrayList?!
    2. Musst du die ArrayList in der Sub New oder in Form_Load erst instanziieren: col = new ArrayList()

    Die Vorzüge der ArrayList (entgegen dem Array) bestehen Hauptsächlich darin, dass man an keinen Typen gebunden ist, das ganze recht gut gemanaged wird (einfach!) und es sich dennoch im ein Array handelt.




    1. Ich brauche das Array um zur Laufzeit beliebig viele Objekte zu erstellen. Immer wenn ich ein neues Bild in meine ListBox schreibe, soll ein neues Objekt der Klasse BildElement erzeugt werden. Als Zähler fungiert die Variable count, die dementsprechend inkrementiert wird. Die Instanzen sollen dann einer ArrayList übergeben werden, damit man sie sortieren kann. Später möchte ich Bilder in der Listbox über Buttons verschieben können(eins hoch bzw eine Position runter).

    2. Da bin ich mir auch nicht sicher.



    Ich bin noch relativ neu in VB. Vielleicht lässt sich das auch einfacher lösen.

    Ich beschreibe mal kurz worum es geht:

    Ich möchte ein Programm für eine Diashow entwickeln.

    Es gibt eine Playlist, wo die Bilder gelistet werden die man auswählt. Zu jedem Bild kann man verschiedene Eigenschaften festlegen(z.B. Anzeigedauer, Rotierung, Einblendeffekt, Sound...).

    Meine Ansatz war der obrige. Eine Klasse zu schreiben, die alle Eigenschaften eines Bildes erfasst und diese BildElemente in einer ArrayList zu speichern(um die Umsortierung zu realisieren).

    Die Playlist kann man sortieren, indem man ein ausgewähltes Element über 2 Buttons jeweils eine Position nach oben bzw. nach unten verschieben kann.



    Best Regards
    Hi!

    1. Das Erklärt noch immer nicht, warum du ne ArrayList UND ein normales Array brauchst. Oder hab ich was übersehen?
    2. Du suchst dir die Sub New raus (muss irgendwo in deinem Form-Code stecken) und fügst die ein Zeile untern ran:

    VB.NET-Quellcode

    1. col = new ArrayList()


    Du musst übrigens keine Beiträge zitieren, wenns klar ist worums geht, bzw. wenn du dich auf den Beitrag genau drüber beziehst.
    Hm, ich glaub du hast da was falsch verstanden :(

    Systeme mit GCs (Garbage Collector) funktionieren so:
    Wenn du ein neues Objekt instanzierst, wird der Speicher dafür belegt und irgendwo hin geschrieben, dass es das Objekt gibt. Wenn der Garbage Collector durchläuft, schaut er, ob es für dieses Objekt noch eine Referenz gibt, wenn nicht, wirds gelöscht. Dabei gilt ein Array-Element genauso als Referenz wie ein ArrayList-Element!
    Intern verwendet die ArrayList sogar ein normales Array.
    Ok ich habs...

    VB.NET-Quellcode

    1. Public Class Form1Dim col As New ArrayListDim count As Integer = 0
    2. Private Sub List()For Each Bild As BildElement In col
    3. ListBox1.Items.Add(Bild.FileName)
    4. Next Bild
    5. End SubPrivate Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOkFor Each BildName As String In OpenFileDialog1.FileNames
    6. col.Add(New BildElement())
    7. col(count).FileName = BildName
    8. count = count + 1
    9. Next BildName
    10. End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. OpenFileDialog1.Title = "Bilder ausw„hlen"
    12. OpenFileDialog1.Multiselect = True
    13. OpenFileDialog1.Filter = "Bilddateien(.jpg)|*.jpg|Alle Dateien|*.*"
    14. OpenFileDialog1.ShowDialog()
    15. End SubPrivate Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    16. End SubPrivate Sub moveUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles moveUp.Click
    17. List()End Sub
    18. End Class


    Dankeschön

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Clemens“ ()