Probleme bei der Verwendung einer ArrayList (objektorientierte Programmierung

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Probleme bei der Verwendung einer ArrayList (objektorientierte Programmierung

    Hallo zusammen,

    ich bin neu hier und programmiere erst seit einigen Tagen. Ich nutze in der Schule die objektorientierte Programmierung, komme bei der Verwendung einer ArrayList aber nicht weiter. Hier mal der Quellcode meine Fach- und Oberflächenklasse:

    Fachklasse Kunde:

    VB.NET-Quellcode

    1. Public Class Kunde
    2. Private kundenNr As String
    3. Private nachname As String
    4. Dim kund As Kunde
    5. Public Property pKundenNr As String
    6. Get
    7. Return kundenNr
    8. End Get
    9. Set(value As String)
    10. kundenNr = value
    11. End Set
    12. End Property
    13. Public Property pNachname As String
    14. Get
    15. Return nachname
    16. End Get
    17. Set(value As String)
    18. nachname = value
    19. End Set
    20. End Property
    21. Sub New(ByVal kKundenNr As String, ByVal kNachname As String)
    22. pKundenNr = kKundenNr
    23. pNachname = kNachname
    24. End Sub
    25. End Class


    Oberflächenklasse Form_1:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim kunden As New ArrayList
    3. Dim kund As Kunde
    4. Dim i As Long
    5. Sub kundeEintragen(ByVal kundenNr As String, ByVal nachname As String)
    6. kund = New Kunde(kundenNr, nachname)
    7. kunden.Add(kund)
    8. ListBox1.Items.Add(kund.ToString())
    9. End Sub
    10. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    11. kunden.Clear()
    12. kundeEintragen("ABC", "Meier")
    13. kundeEintragen("ABD", "Müller")
    14. End Sub
    15. End Class

    Wenn ich den Button1 klicke, steht in der ListBox nur Test_ArrayList.Kunde dabei handelt es sich um den Namen des Projekte und die Fachklasse (Kunde).

    Eigentlich sollte an dieser Stelle der Kunde ABC Meier und ABD Müller stehen.

    Kann mir jemand helfen?

    Besten Dank :thumbup:

    Falsches Label (kein VB6), Keine Code-Tags und falsches Unterforum. Bitte schau dir die Grundregeln zu Benutzung des Forums an. Das erhöht deine Chance Antworten zu erhalten und macht anderen weniger Arbeit.
    Editiert, verschoben. ~fufu

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „fufu“ ()

    Willkommen im Forum.
    Das klappt deshalb nicht, weil eine Stringdarstellung eines komplexen Objektes, in diesem Fall die Stringdarstellung der Kundenklasse ... undefiniert ist. Stell Dir vor, Deine Klasse hätte 30 Variablen, davon 18 String-Variablen. Woher soll das Programm wissen, was da angezeigt werden soll? Daher wird standardmäßg der Name des Datentypen bei .ToString() (Zeile#9 in Klasse Form1) angegeben. Überlade die Methode ToString in Deiner Kundenklasse, um den gewünschten Effekt zu erzielen.
    Aus dem Kopf heraus muss in die Kundenklasse:

    VB.NET-Quellcode

    1. Public Overrides Function ToString() As String
    2. Return $"{Me.kundenNr} {Me.nachname}" 'oder ohne interpolierten String: Return Me.kundenNr & " " & Me.nachname
    3. End Function

    btw: Was hat Zeile#4 in der Kundenklasse zu suchen?

    ##########

    Wenn ich schon von "Überladen" rede, sollte das natürlich auch in den Code. Habe ihn korrigiert. Da fehlte das Schlüsselwort Overrides im Funktionskopf.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Kosmos_Igel schrieb:

    kund.ToString()
    Ist der Übeltäter.
    Wenn du ToString auf ein Objekt anwendest, dann bekommst du normalerweise den Objektnamen zurück, wenn die Klasse kein ToSTring implementiert.
    Edit: Da war @VaporiZed wohl schon schneller.

    Vereinfachter Vorschlag für deine Klasse Kunde:

    VB.NET-Quellcode

    1. Public Class Kunde
    2. Public Property KundenNr As String
    3. Public Property Nachname As String
    4. Sub New(KundenNr As String, Nachname As String)
    5. Me.KundenNr = KundenNr
    6. Me.Nachname = Nachname
    7. End Sub
    8. Public Overrides Function ToString() As String 'Vorschlag von @VaporiZed übernommen
    9. Return $"{Me.kundenNr} {Me.nachname}"
    10. End Function
    11. End Class
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    es gibt so gut wie nie einen Grund ArrayList zu verwenden, es sei denn es sollen wirklich absolut und ich meine absolut beliebige Datentypen rein.
    Verwende lieber die generischen Typen, die es jetzt schon seit einigen Jahren gibt:
    Hier z.B. List(Of Kunde)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ergänzend zur Antwort von @jvbsl gibt man die List(Of Kunde) als.DataSource an die Listbox und arbeitet mit DisplayMember und ValuemEmber...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen