Array einer Klasse erstellen?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Array einer Klasse erstellen?

    Hallo Leute,
    also im Programm können verschiedene Kategorien hinzugefügt werden.
    In jede Kategorie können verschiedene Bilder geladen werden.
    Die Anzahl der Kategorien ist beim Start des Programms noch unbekannt.
    Das blinde Erstellen von Kategorien im Vorfeld würde ich gerne verhindern.

    Ist es möglich ein Array der Klasse iBitmap zu erstellen?
    Mit Klassen hab ich schon gearbeitet aber das jetzt benötigte ist mir völlig neu.
    Leider finde ich zu diesem Thema nicht einmal Lösungsansätze und mir gehen so langsam die Suchbegriffe aus.
    Wäre für einen Lösungsansatz oder Suchbegriffe zu diesem Thema wirklich Dankbar :thumbup:

    Kurzformbeispiel wie ich es im Moment mache:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public MeineAutos As New List(Of iBitmap)
    3. Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
    4. Dim aBitmap As New Bitmap(Image.FromFile("C:\tmp\Autos\1.png"))
    5. MeineAutos.Add(New iBitmap(CType(aBitmap, Bitmap)))
    6. Me.BackgroundImage = New Bitmap(MeineAutos(0).Bitmap)
    7. End Sub
    8. End Class
    9. Public Class iBitmap
    10. Private c_Bitmap As Bitmap
    11. Public Sub New(ByVal p_Bitmap As Bitmap)
    12. c_Bitmap = p_Bitmap
    13. End Sub
    14. Public Property Bitmap As Bitmap
    15. Get
    16. Return c_Bitmap
    17. End Get
    18. Set(ByVal value As Bitmap)
    19. c_Bitmap = value
    20. End Set
    21. End Property
    22. End Class

    So geht's ja nicht, da die Liste den Index nach aufruf von MeineAutos.Add verwendet:

    VB.NET-Quellcode

    1. Public MeineAutos(10) As New List(Of iBitmap)
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Ich blick's zwar nur zur Hälfte, aber: Es soll x Kategorien geben. Jede Kategorie enthält y Bilder. Diese Bilder sind je in einer List(Of iBitmap).
    Public MeineAutos(10) As New List(Of iBitmap) würde ja implizieren, dass Du 11 iBitmap-Listen haben willst. Ist das gewollt? Ansonsten definiere doch eine Public Class Category, die neben anderen Sachen auch als Member eine List(Of iBitmap) enthält.

    btw: Public MeineAutos(10) As List(Of iBitmap); und dann in ner For-Schleife jede List mit New anlegen. Als Alternative zu o.g. Vorschlag.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ich versteh auch nur hälfte.
    zum einen die Frage, wie man ein Array von Klassen erstellt - das ist einfach: Etwa für die Klasse FileInfo erstellt man so ein Array:

    VB.NET-Quellcode

    1. dim fileInfos(9) As FileInfo
    Aber was ich nicht verstehe ist der Zusammenhang mit dem weiteren Text, da wird auf einmal von Kategorien gesprochen, und in den Kategorien seien Listen von Bildern, und dann gibts Codebeispiele mit Autos - was hat das nu mit Kategorien zu tun, und was haben dies Listen und Kram mit einem Array zu tun (eine Liste ist ja kein Array)?
    Und wieso ühaupt Array, wenn man doch Listen hat?

    Also versuch das Problem nochmal darzustellen, dass man iwas davon kapieren kann.
    ja fein, und nun zeig uns den Code der Klasse Kategorie.

    Hingegen die Klasse iBitmap kannste löschen - die hat ühaupt keinen Sinn - eine Klasse mit nichts weiter als einer Bitmap drin - da kann man die Bitmap doch gleich direkt nehmen - viele Umstände gespart.
    Ausserdem ein böses Benamungs-Verbrechen: Klassen dürfen nie mit i anfangen, denn es ist weltweite .Net-Konvention, dass Datentypen mit i Interfaces sind, keine Klassen.
    Also einfach löschen, und neu anfangen mit der Klasse Kategorie
    Die muss ja wohl zumindest einen Namen haben, und eine Liste von Bildern.
    Du hast recht, das Beispiel war Müll...
    hatte bisher "Aktiv" nicht viel mit Foren zu tun, war halt nur zum lesen drin wenn mich Bücher oder die MSDN nicht wirklich weiter gebracht haben.

    verstehe ich grade nicht...

    ErfinderDesRades schrieb:

    Hingegen die Klasse iBitmap kannste löschen - die hat ühaupt keinen Sinn - eine Klasse mit nichts weiter als einer Bitmap drin
    (Die Klasse in meinem Beispiel hat nur die Bitmap-Eigenschaft, die eigentliche Klasse hat mehr Eigenschaften)


    Habe den Pfad der Bilder bisher über einen OpenFileDialog + MultiSelect geladen und dann die Bilder per Schleife hinzugefügt...

    VB.NET-Quellcode

    1. For Index...
    2. Dim aBitmap As New Bitmap(Image.FromFile(OFD1.FileNames(Index)))
    3. Bilderserie1.Add(New iBitmap(CType(aBitmap, Bitmap)))
    4. Next


    Alledings muss ich die Kategorie "Bilderserie1" vorher defienieren...

    VB.NET-Quellcode

    1. Public Bilderserie1 As New List(Of iBitmap)


    Der zugriff auf das Bild läuft dann über..

    VB.NET-Quellcode

    1. Bilderserie1(Index).Bitmap


    Mein Prolem...
    Da die Anzahl der Kategorien davon abhängt wie oft der OpenFileDialog benutzt wird um Bilderserien zu laden, kann ich die Kategorien nicht im voraus definieren
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Der TE hat das Problem das er bei Listen an klassische indizierte Arrays denkt.

    Bin zwar derzeit nur noch in C# unterwegs aber ich probiere es mal.

    VB.NET-Quellcode

    1. Dim dinosaurs As New List(Of String)
    2. dinosaurs.Add("Tyrannosaurus")
    3. dinosaurs.Add("Amargasaurus")


    msdn.microsoft.com/de-de/library/6sh2ey19(v=vs.110).aspx

    Die Größe von der List dinosaurs muss vorher nicht angegeben werden.
    Die Items werden geaddet und Sie passt sich an.

    Wenn du der List nun mitteilst das sie Objekte vom Typ Bitmap (oder deiner Kategorie Klasse) enthalten soll. Sollte auch das ohne Probleme klappen.

    MfG Mika

    Steppenpferd schrieb:

    verstehe ich grade nicht...

    ErfinderDesRades schrieb:

    Hingegen die Klasse iBitmap kannste löschen - die hat ühaupt keinen Sinn - eine Klasse mit nichts weiter als einer Bitmap drin
    (Die Klasse in meinem Beispiel hat nur die Bitmap-Eigenschaft, die eigentliche Klasse hat mehr Eigenschaften)
    ja wenn sie mehrere Eigenschaften hat, kann sie schon sinnvoll sein - aber gezeigt hast du nur eine sinnlose Klasse.
    Das ist im Forum oft ein Problem dass iwas anneres gezeigt wird, als was das eigliche Problem ist - und da verliert man sich dann sehr schnell im Kommunikations-Nirvana.
    Gut - soweit glaub geklärt, nur

    Steppenpferd schrieb:

    Mein Prolem...
    ist imo, dass du gar keine Kategorie-Klasse hast - oder warum zeigst du davon nicht den Code?
    Aber ohne Kategorie-Klasse kannst du nur schwerlich Probleme beim Anzeigen von Kategorien lösen (doch, es geht, aber halt schwerlich, und wird sehr cryptisch).