Listbox - Array erstellen mit 2 Werten

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von bk__.

    Listbox - Array erstellen mit 2 Werten

    Hallo zusammen,

    Wie kann ich folgendes realisieren:

    Ich möchte im Listbox Elemente stehen haben, worin jedes Element eine bestimmte Zahl hat.

    z.B.
    das Element Haus hat die Nummer 10
    das Element Tisch hat die Nummer 230
    das Element Apfel hat die Nummer 3100

    Jedoch sollte im Listbox nur folgende Elemente anwählbar sein:
    - Haus
    - Tisch
    - Apfel


    Wenn im listbox Haus ausgewählt wird, sollte die Zahl 10 im Textbox angezeigt werden
    Wenn im listbox Tisch ausgewählt wird, sollte die Zahl 230 im Textbox angezeigt werden
    Wenn im listbox Apfel ausgewählt wird, sollte die Zahl 3100 im Textbox angezeigt werden


    Da das schlussendlich mehrere Elemente sein werden, kann ich schlecht dies mit einer If Haus Then Textbox.Text = 10 lösen.
    Ich muss irgendwie schaffen, den Wert "Haus" und die dazugehörige "Zahl"abzuspeichern, jedoch nur im Listbox den Wert "Haus" anzuzeigen.

    Wie mache ich das?
    Ich hoffe ihr könnt mir helfen. Vielen Dank bereits im Voraus!!

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

    Dann erstell Dir eine Klasse Gegenstand, fülle die Klasse mit den gewünschten Properties. Verwalte Deine Instanzen in einer List(Of Gegenstand), gib Deiner ListBox als Datasource diese Liste. Bei einer Auswahl castest Du das Item in zurück zu Gegenstand und lässt die Property in Deiner TextBox anzeigen.

    Die Profilösung ist natürlich ein DataSet, welches die verschiedenen Properties abbildet. Dann kannst Du richtig mit DataBinding arbeiten...
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Erstelle dir eine eigene Klasse, die sowohl die Zahl als auch den Namen in Eigenschaften speichert. Dann erstellst du dir eine List(Of <deine Klasse>) und bindest sie an die Listbox. Mittels DisplayMember wählst du die Eigenschaft aus, die angezeigt werden soll (also der Name).

    Edit: mah, zu langsam.
    Besten Dank für eure Antworten!

    @programmer71
    Danke!

    @SpaceyX
    Kannst du mir einen Tipp / Beispiel geben, mit welchem Befehl du meinst "fülle die Klasse mit den gewünschten Properties"


    @Artentus
    Was genau meinst du mit in Eigenschaften abspeichern?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _listGegenstand As New System.ComponentModel.BindingList(Of Gegenstand)
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. _listGegenstand.Add(New Gegenstand With {.GegenstandName = "Haus", .GegenstandValue = 10})
    5. _listGegenstand.Add(New Gegenstand With {.GegenstandName = "Tisch", .GegenstandValue = 30})
    6. _listGegenstand.Add(New Gegenstand With {.GegenstandName = "Apfel", .GegenstandValue = 122})
    7. ListBox1.DataSource = _listGegenstand
    8. ListBox1.DisplayMember = "GegenstandName"
    9. End Sub
    10. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    11. If Not ListBox1.SelectedItem Is Nothing Then
    12. Dim g As Gegenstand = DirectCast(ListBox1.SelectedItem, Gegenstand)
    13. TextBox1.Text = g.GegenstandValue.ToString()
    14. End If
    15. End Sub
    16. End Class
    17. Public Class Gegenstand
    18. Public Property GegenstandName As String
    19. Public Property GegenstandValue As Integer
    20. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Cool!! Ich werde den Code genauer anschauen und enstprechend anpassen.
    Vielen Dank!

    @SpaceyX
    Bist du sicher, dass folgender Code so aussieht:

    VB.NET-Quellcode

    1. Public Class Gegenstand
    2. Public Property GegenstandName As String
    3. Public Property GegenstandValue As Integer
    4. End Class


    ?

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

    @SpaceyX

    Nicht wirklich.... Wenn ich den Code von dir eingebe und auf Enter klicke, schlägt er mir folgendes vor:

    VB.NET-Quellcode

    1. Public Class Test
    2. Public Property GegenstandName()
    3. Get
    4. End Get
    5. Set(ByVal value)
    6. End Set
    7. End Property
    8. End Class
    Könnte daran liegen, dass du 2008 verwendest.
    Versuch es einfach mal so:

    VB.NET-Quellcode

    1. Public Class Test
    2. Private _name As String
    3. Public Property GegenstandName()
    4. Get
    5. Return _name
    6. End Get
    7. Set(ByVal value)
    8. _name = value
    9. End Set
    10. End Property
    11. End Class

    Und für die andere Property dann das gleiche.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _listGegenstand As New System.ComponentModel.BindingList(Of Gegenstand)
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. _listGegenstand.Add(New Gegenstand("Haus", 20))
    5. _listGegenstand.Add(New Gegenstand("Tisch", 22))
    6. _listGegenstand.Add(New Gegenstand("Apfel", 1322))
    7. ListBox1.DataSource = _listGegenstand
    8. ListBox1.DisplayMember = "GegenstandName"
    9. End Sub
    10. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    11. If Not ListBox1.SelectedItem Is Nothing Then
    12. Dim g As Gegenstand = _listGegenstand(ListBox1.SelectedIndex)
    13. TextBox1.Text = g.GegenstandValue.ToString()
    14. End If
    15. End Sub
    16. End Class
    17. Public Class Gegenstand
    18. Private _GegenstandName As String
    19. Public Property GegenstandName As String
    20. Get
    21. Return _GegenstandName
    22. End Get
    23. Set(value As String)
    24. _GegenstandName = value
    25. End Set
    26. End Property
    27. Private _GegenstandValue As Integer
    28. Public Property GegenstandValue As Integer
    29. Get
    30. Return _GegenstandValue
    31. End Get
    32. Set(value As Integer)
    33. _GegenstandValue = value
    34. End Set
    35. End Property
    36. Public Sub New(ByVal gegenstandName As String, ByVal gegenstandValue As Integer)
    37. Me.GegenstandName = gegenstandName
    38. Me.GegenstandValue = gegenstandValue
    39. End Sub
    40. End Class


    Sollte in Deiner "antiken" Version dann in Etwa so gehen. Hab keine Ahnung, ob es in der 2008er schon das "With"-Schlüsselwort gegeben hat, darum hab ich das mal angepasst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o