Bei Auswahl eines Eintrags in Listbox, andere Listbox mit Optionen füllen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von TGenius.

    Bei Auswahl eines Eintrags in Listbox, andere Listbox mit Optionen füllen

    Guten Tag VB-Community

    Da ich nicht im geringsten ein Fachmann in der VB-Programmierung bin und mich über die bisher zusammengegoogelten Erfolge ziemlich freue, aber jetzt an einem Punkt angekommen bin, an dem ich durch googeln nichtmehr weiterkomme, möchte ich euch gerne um Hilfe bitten.

    Ich habe eine Art Sportleistungserfassungtabelle. Mein erstes Form kann bereits Teilnehmer hinzufügen, auch wenn das hier an dieser Stelle eher unbedeutend ist. Mein zweites Form soll die Sportleistungen in die Liste eintragen damit diese berechnet und ausgewertet werden. Auf dem Form sind bis jetzt 3 Listboxen. Die 1. Listbox enthält die Namen, welche durch C10-C110 aufgelistet werden. Die 2. Listbox enthält die Überkategorien. Die 3. Listbox SOLL die Unterkategorien enthalten, jenachdem welche Option in Listbox2 ausgewählt wurde.

    Meine Ansatz war verschiedene Listboxen der Kategorie 3 zu erstellen, welche schon befüllt sind und visible=false sind, damit ich sie mit der der jeweiligen Option aus der Überkategorie auf True setzte… Vermutlich nicht die geschickteste Methode. Grundsätzlich ist mir die Performance egal und ich denke für euch ist diese Aufgabe auch das geringste Problem.

    Also nochmal in Kurzform mit Beispiel:

    3 Listboxen:

    1. Namen

    2. Überkategorie ->Inhalt: 1, 2, 3, 4, 5, 6, 7

    3. Unterkategorie ->Inhalt je nach Auswahl von Überkategorie (z.B. 1 von ÜK = Lauf, dann kommt in die Unterkategorie 100m, 200m, 300m etc.)

    Wie ist dies Umsetzbar?

    Ich bedanke mich jetzt schon einmal und hoffe dass sich jemand die Zeit nimmt so einem Anfänger wie mir zu helfen ;)
    Ich schlage dir vor, vergiß die Listboxen... Deutlich performanter und besser geeignet sind da DatagridViews. Denn du willst ja Tabellen darstellen.
    Schau dir mal folgendes an:
    Daten laden, speichern, verarbeiten
    DB-Programmierung ohne Datenbank


    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Wenn du es immernoch mit Drei Listboxen machen willst kannst du dich
    durch IF -Abfragen vorarbeiten:

    VB.NET-Quellcode

    1. Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    2. If ListBox2.SelectedItem = "a" Then
    3. MsgBox("A")
    4. 'Aktion ausführen
    5. ElseIf ListBox2.SelectedItem = "b" Then
    6. MsgBox("b")
    7. 'Aktion ausführen
    8. End If
    9. End Sub
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    @Gather Er will doch je nachdem was in der 1.Listbox ausgewählt ist, in der 2.Listbox etwas anderes stehen haben. Oder hab ich da was falsch verstanden :whistling:

    @TE Nimm die SelectedIndex-Eigenschaft der Listbox

    VB.NET-Quellcode

    1. If Listbox1.SelectedIndex = 0 Then 'nullbasierender Index
    2. 'Einträge in anderer Listbox
    3. Listbox2.Items.Clear()
    4. Listbox2.Items.Add("...")
    5. End If
    Listboxen sind aber numa für solcherlei Datenmodelle komplett ungeeignet.
    Es geht hier um ein Datenmodell mit mehreren Tabellen wie Personen, Sportarten, Kategorien und deren Verknüpfung untereinander. Dies lässt sich mit einem Dataset recht einfach darstellen. Zudem ist die Speicher- und Lademöglichkeit von Hause aus enthalten. Dies auch ohne Datenbank als XML.Datei. damit lässt sich so eine Anwendung auf nem Stick halten, so dass das problemlos von einem zum anderen geschleppt werden kann.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    Gather schrieb:

    Wenn du es immernoch mit Drei Listboxen machen willst kannst du dich
    durch IF -Abfragen vorarbeiten:

    VB.NET-Quellcode

    1. Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    2. If ListBox2.SelectedItem = "a" Then
    3. MsgBox("A")
    4. 'Aktion ausführen
    5. ElseIf ListBox2.SelectedItem = "b" Then
    6. MsgBox("b")
    7. 'Aktion ausführen
    8. End If
    9. End Sub


    Hab ich ausprobiert, weil es ja immerhin mit leichter abänderung das tuen würde was ich brauche... Allerdings akzeptiert er das "Handles" nicht... wahrscheinlich liegt das aber auch an mir. Ich hab keine Ahnung wie genau die erste Zeile funktioniert und was die zu sagen hat.

    TGenius schrieb:

    @Gather Er will doch je nachdem was in der 1.Listbox ausgewählt ist, in der 2.Listbox etwas anderes stehen haben. Oder hab ich da was falsch verstanden :whistling:

    @TE Nimm die SelectedIndex-Eigenschaft der Listbox

    VB.NET-Quellcode

    1. If Listbox1.SelectedIndex = 0 Then 'nullbasierender Index
    2. 'Einträge in anderer Listbox
    3. Listbox2.Items.Clear()
    4. Listbox2.Items.Add("...")
    5. End If


    Ich hab ja gesagt dass ich ein absoluter Pfosten bin ;) Bewirkt die SelectedIndex funktion, dass er merkt welchen Eintrag der Listbox er nimmt in nummerischer Reihenfolge? Also "ListBox1.SelectedIndex = 1" wäre dann die 1. "Option" auch wenn sie quasi "Lauf" heißt?


    Vatter schrieb:

    Listboxen sind aber numa für solcherlei Datenmodelle komplett ungeeignet.
    Es geht hier um ein Datenmodell mit mehreren Tabellen wie Personen, Sportarten, Kategorien und deren Verknüpfung untereinander. Dies lässt sich mit einem Dataset recht einfach darstellen. Zudem ist die Speicher- und Lademöglichkeit von Hause aus enthalten. Dies auch ohne Datenbank als XML.Datei. damit lässt sich so eine Anwendung auf nem Stick halten, so dass das problemlos von einem zum anderen geschleppt werden kann.


    Vermutlich hast du recht. Du denkst schon in Richtung Endergebniss, wogegen ich versuche Schritt für Schritt meine Vorstellungen zu realisieren auch wenn sich das vermutlich am Ende aufgrund der umständlichen programmierung nicht umsetzen lässt. Da ich jetz zuhause am Rechner sitze und nichtmehr übers Smartphone schreiben muss, werd ich es nochmal ausführlich erklären was mein Ziel ist.

    Ich habe wie oben schon angesprochen dieses Form. Es soll dazu dienen die erbrachten Sportleistungen in eine Tabelle einzutragen. Es handelt sich nur um eine Tabelle! Anhand der 1. Listbox (Namen von Teilnehmern) in diesem Form soll ausgelesen werden welche X-Achse ich brauche bzw Row. Die anderen Listboxen sollen definieren in welche Spalte (Y-Achse) der Eintrag kommt. Um dies Visuell zu vereinfachen dachte ich an diese Listboxen die Erst die Überkategorien festlegen. Eine dieser Überkategorien heißt "DSA" (Deutsches Sportabzeichen") welches ab 2013 aus nurnoch 4 Disziplinen besteht -> Ausdauer, Sprint, Wurf und Sprung zumindest im groben... Wenn ich jetzt "DSA" makiere sollen in der darauf folgenen Listbox die 4 Disziplinen erscheinen und wenn ich eine andere Überkategorie wähle, sollen diese Einträge nicht zu sehen sein sondern die dazugehörigen dieser Überkategorie.
    Ich hoffe das ganze ist jetz etwas verständlicher
    Ich bedanke mich auf jeden Fall schonmal bei jedem, die sich die Mühe bereits gemacht haben oder noch machen werden :)

    Makuza schrieb:

    Allerdings akzeptiert er das "Handles" nicht... wahrscheinlich liegt das aber auch an mir
    Kann es sein, dass deine Listbox nicht Listbox2 heißt?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Makuza schrieb:

    wogegen ich versuche Schritt für Schritt meine Vorstellungen zu realisieren
    Ja, aber es ist klar ersichtlich, dass du Schritt für Schritt auffm Holzweg unterwegs bist.
    Vatters Empfehlung also: Schreite auf einem Weg, der auch zum Ziel führt.
    Je mehr Zeit du auffm Holzweg vertrödelst, desto unwilliger wirst du später, umzukehren, nachm Motto "hu, jetzt binnich aber schon so weit gekommen". Aus diesem Sich-Einfahren auffm Holzweg entstehen dann sehr oft ganz grauselig abstruse Code-"Lösungen".

    Im Detail: Du hast wesentlich mehr Tabellen als nur die Sport-Leistungen. Bei dir kommen Teilnehmer vor, Sportarten, Wettkämpfe, Kategorien,... - mit "einer Tabelle" - wie gesagt: das wird ganz grauselig abstrus.

    Gather schrieb:

    Makuza schrieb:

    Allerdings akzeptiert er das "Handles" nicht... wahrscheinlich liegt das aber auch an mir
    Kann es sein, dass deine Listbox nicht Listbox2 heißt?


    Nein tut sie auch nicht, sondern "ListBoxKategorie" allerdings hab ich das dementsprechend abgeändert ;)

    ErfinderDesRades schrieb:

    Makuza schrieb:

    wogegen ich versuche Schritt für Schritt meine Vorstellungen zu realisieren
    Ja, aber es ist klar ersichtlich, dass du Schritt für Schritt auffm Holzweg unterwegs bist.
    Vatters Empfehlung also: Schreite auf einem Weg, der auch zum Ziel führt.
    Je mehr Zeit du auffm Holzweg vertrödelst, desto unwilliger wirst du später, umzukehren, nachm Motto "hu, jetzt binnich aber schon so weit gekommen". Aus diesem Sich-Einfahren auffm Holzweg entstehen dann sehr oft ganz grauselig abstruse Code-"Lösungen".

    Im Detail: Du hast wesentlich mehr Tabellen als nur die Sport-Leistungen. Bei dir kommen Teilnehmer vor, Sportarten, Wettkämpfe, Kategorien,... - mit "einer Tabelle" - wie gesagt: das wird ganz grauselig abstrus.


    Ich nehms mir zu Herzen und werd mich morgen in die Links von Vatta einlesen, danke soweit