ComboBox abhängig von ComboBox

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Angarius.

    ComboBox abhängig von ComboBox

    Hallo, ich habe 3 ComboBoxen

    1. ComboBox1 = Niederlassung
    2. ComboBox2 = Fachbereich
    3. ComboBox3 = Teamleiter


    Der Bearbeiter soll seine Niederlassung, dazugehörigen Fachbereich und seinen Teamleiter wählen

    Beispiel:

    1. ComboBox1 (Niederlassung) = Musterstadt
    2. ComboBox2 (Fachbereich) = Buchhaltung
    3. ComboBox3 (Teamleiter) = Heidi Mustermann



    Sollte der Bearbeiter zB. die Niederlassung ändern, so sollen dann wiederrum folgendes stehen....

    1. ComboBox1 (Niederlassung) = Musterhausen
    2. ComboBox2 (Fachbereich) = Geschäftsführung
    3. ComboBox3 (Teamleiter) = Hans Mustermann



    Die Auswahlmöglichkeiten sollen individuell angepasst werden können.... Kann mir da einer helfen?

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. If ComboBox1.SelectedIndex = 0 Then
    3. ComboBox2.Items.Clear()
    4. ComboBox3.Items.Clear()
    5. ComboBox2.Items.Add("Blub")
    6. ComboBox2.Items.Add("Fachkraft für Gerümpel und Entsorgung")
    7. Combobox3.Items.Add("Hier darf etwas nettes stehen")
    8. End If
    9. End Sub


    Könntest das ganze natürlich noch optisch hübscher gestalten mit einer With-Funktion etc. aber so in etwa läuft der Hase.

    Hatschi schrieb:

    If ComboBox1.SelectedIndex = 0 Then ComboBox2.Items.Clear() ComboBox3.Items.Clear() ComboBox2.Items.Add("Blub") ComboBox2.Items.Add("Fachkraft für Gerümpel und Entsorgung") Combobox3.Items.Add("Hier darf etwas nettes stehen") End If



    Naja, so war das nicht gemeint....das habe ich ja vorhin schon hinbekommen! :)

    Meinte eher so....

    Niederlassung = Musterhausen -> Fachbereiche sind Buchhaltung, Kundenmanagement -> Teamleiter sind Hansi Mustermann

    ODER


    Niederlassung = Hamburg -> Fachbereiche sind Geschäftsführung, Rechtsstelle -> Teamleiter sind Berti Mustermann
    Und was an meinem Code sollte nicht das von dir gewünschte Ergebnis erzielen? 8|
    (Abgesehen davon das er umständlich geschrieben ist)

    //edit:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. If ComboBox1.SelectedIndex = 0 Then
    3. ComboBox2.Items.Clear()
    4. ComboBox3.Items.Clear()
    5. ComboBox2.Items.Add("Buchhaltung")
    6. ComboBox2.Items.Add("Kundenmanagement ")
    7. Combobox3.Items.Add("Hansi Mustermann")
    8. Elseif ComboBox1.SelectedIndex = 1 then
    9. ComboBox2.Items.Clear()
    10. ComboBox3.Items.Clear()
    11. ComboBox2.Items.Add("Geschäftsführung")
    12. ComboBox2.Items.Add("Rechtsstelle ")
    13. Combobox3.Items.Add("Berti Mustermann")
    14. End If
    15. End Sub


    Wenn du natürlich über 30 Einträge hast wird dieser Code extrem umständlich sein, ansonsten wüsste ich nicht wieso mein Code nicht dein Ergebnis bringen sollte.

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. If ComboBox1.SelectedIndex = 0 Then
    3. ComboBox2.Items.Clear()
    4. ComboBox3.Items.Clear()
    5. ComboBox2.Items.Add("Blub")
    6. ComboBox2.Items.Add("Fachkraft für Gerümpel und Entsorgung")
    7. Combobox3.Items.Add("Hier darf etwas nettes stehen")
    8. End If
    9. End Sub



    Egal welchen Wert ich in der ComboBox1 festlege, die Werte in der ComboBox2 bleiben immer dieselben! Das soll aber nicht sein. Der Wert in der ComboBox2 soll abhängig von der Auswahl der ComboBox1 sein.

    zB.

    ComboBox1
    Bundesland = Nordrhein Westfalen

    ComboBox2
    Städte = Dortmund, Düsseldorf, Köln


    oder

    ComboBox1
    Bundesland = Thüringen

    ComboBox2
    Städte = Erfurt, Jena, Gotha



    Ich hoffe, dass war ein wenig verständlicher.....


    Also bei Bundesland (ComboBox1) kann nicht Nordrhein Westfalen stehen und bei (ComboBox2) Städte dann auf einmal Erfurt, Jena, Gotha.....vielmehr nur die aus Nordrhein Westfalen!
    Nur mal so unter uns, ich weiß nicht wo dein Problem liegt:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. If ComboBox1.SelectedIndex = 0 Then
    3. ComboBox2.Items.Clear()
    4. ComboBox3.Items.Clear()
    5. ComboBox2.Items.Add("Test2")
    6. ComboBox3.Items.Add("Test3")
    7. ElseIf ComboBox1.SelectedIndex = 1 Then
    8. ComboBox2.Items.Clear()
    9. ComboBox3.Items.Clear()
    10. ComboBox2.Items.Add("Arbeit2")
    11. ComboBox3.Items.Add("Arbeit3")
    12. End If
    13. End Sub


    Combobox1; Index0 = Test, Index1 = Arbeit

    Wähle ich Test erhalte ich in den anderen Comboboxen Test2 und Test3
    Wähle ich Arbeit erhalte ich Arbeit2 und Arbeit3

    Exakt das was du willst. Hast mein Code denn schon einmal ausprobiert?
    Ich glaub er sucht folgendes:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. 'Zugehörige Items der anderen Comboboxen kann man so frei wählen
    3. Select Case ComboBox1.SelectedIndex
    4. Case 0
    5. ComboBox2.SelectedIndex = 0
    6. ComboBox3.SelectedIndex = 0
    7. Case 1
    8. ComboBox2.SelectedIndex = 1
    9. ComboBox3.SelectedIndex = 1
    10. Case 2
    11. ComboBox2.SelectedIndex = 2
    12. ComboBox3.SelectedIndex = 2
    13. End Select
    14. End Sub
    15. Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
    16. Select Case ComboBox2.SelectedIndex
    17. Case 0
    18. ComboBox3.SelectedIndex = 0
    19. ComboBox1.SelectedIndex = 0
    20. Case 1
    21. ComboBox3.SelectedIndex = 1
    22. ComboBox1.SelectedIndex = 1
    23. Case 2
    24. ComboBox3.SelectedIndex = 2
    25. ComboBox1.SelectedIndex = 2
    26. End Select
    27. End Sub
    28. Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged
    29. Select ComboBox3.SelectedIndex
    30. Case 0
    31. ComboBox2.SelectedIndex = 0
    32. ComboBox1.SelectedIndex = 0
    33. Case 1
    34. ComboBox2.SelectedIndex = 1
    35. ComboBox1.SelectedIndex = 1
    36. Case 2
    37. ComboBox2.SelectedIndex = 2
    38. ComboBox1.SelectedIndex = 2
    39. End Select
    40. End Sub


    oder einfach so:

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
    3. ComboBox3.SelectedIndex = ComboBox1.SelectedIndex
    4. End Sub
    5. Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
    6. ComboBox1.SelectedIndex = ComboBox1.SelectedIndex
    7. ComboBox3.SelectedIndex = ComboBox1.SelectedIndex
    8. End Sub
    9. Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged
    10. ComboBox1.SelectedIndex = ComboBox1.SelectedIndex
    11. ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
    12. End Sub

    Hatschi schrieb:

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged If ComboBox1.SelectedIndex = 0 Then ComboBox2.Items.Clear() ComboBox3.Items.Clear() ComboBox2.Items.Add("Test2") ComboBox3.Items.Add("Test3") ElseIf ComboBox1.SelectedIndex = 1 Then ComboBox2.Items.Clear() ComboBox3.Items.Clear() ComboBox2.Items.Add("Arbeit2") ComboBox3.Items.Add("Arbeit3") End If End Sub



    Ich probiere dein Code schon solange aus, dass ich schon wieder feststelle, dass er nicht funktioniert!!

    Ich habe 2 ComboBoxen, beide sind leer, ich schreibe nur deinen code in der ComboBox1 und siehe da - sobald ich F5 drücke, sind beide ComboBoxen leer.... Ich kann nichts auswählen!
    Ich glaube da liegt ein Missverständnis vor. Du musst auch in Combobox1 etwas auswählen.

    Mein Code sorgt dafür das du je nachdem was du in Combobox1 auswählst, andere Auswahlmöglichkeiten in 2 und 3 hast.

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

    Hatschi schrieb:

    Ich glaube da liegt ein Missverständnis vor. Du musst auch in Combobox1 etwas auswähken.



    Haha, das mache ich auch.... so blöd bin ich nun doch auch wieder nicht :)


    Ich habe jetzt einfach unter den Feldeigenschaften (Auflistung) es probiert, damit funktioniert es, der Code definitiv aber nicht!


    Trotzdem danke....
    Ich glaube ich weis was er meint.

    ComboBox1 Einträge
    - Mitarbeiter
    - Abteilungsleiter
    - Regionalleiter

    Nach Auswahl eines Eintrags soll die ComboBox2 gefüttert werden mit
    - Hans
    - Willi
    - Erst

    oder

    - Herr Meier
    - Frau Schussel

    oder

    - Herr Dr. Meier Lüdenscheid


    Das kannst du mit dem hier geposteten Code erstellen.
    Kleine erweiterung

    VB.NET-Quellcode

    1. Privat Sub ComboBox1 SelectedIndex.Changed(.......
    2. ComboBox2.Items.Claer()
    3. Select Case ComboBox1.SelectedIndex
    4. Case 0
    5. For Each Item As String In ...... 'Mitarbeiter
    6. ComboBox2.Item.Add(Item)
    7. Next
    8. Case 1
    9. For Each Item As String In ...... 'Abteilungsleiter
    10. ComboBox2.Item.Add(Item)
    11. Next
    12. Case 2
    13. For Each Item As String In ...... 'Regionalleiter
    14. ComboBox2.Item.Add(Item)
    15. Next
    16. End Select


    Woher dann auch immer die Daten für die Einträge geholt werden.
    Hm, ich weiß ehrlich nicht mehr, wie ich es erklären soll!

    In ComboBox1 soll die Niederlassung stehen:

    Erklärung:
    Dort soll zum Beispiel, Musterstadt, Musterberg, Musterhausen, Musterdorf drin stehen. Je nachdem, welchen Ort ich auswähle, sollen entsprechende Abteilungen in ComboBox2 gewählt werden können, da diese nicht an allen Standorten vertreten sind!

    Das heist:

    Musterstadt = Rechnungsabteilung
    Musterberg = Kundenbetreuung und IT-Service
    Musterhausen = Mahn- und Inkassowesen
    Musterdorf = Geschäftsführung, Personalabteilung, Buchhaltung


    In ComboBox2 soll nun bei der Auswahl von

    Musterstadt = Rechnungsabteilung stehen, oder
    Musterdorf = Mahn- und Inkassowesen oder
    Musterhausen...... usw.....



    Zu guter Letzt soll dann in ComboBox3 noch der zuständige Abteilungsleiter gewählt werden können:


    Musterstadt -> Rechnungsabteilung = Anna Mustermann
    Musterberg -> Kundenbetreuung = Peter Lustig
    Musterberg -> IT-Service = Hans Mustermann
    Musterhausen -> Mahnwesen = Heidi Berg
    Musterhausen -> Inkassowesen = Trulla Hampelmann
    Musterdorf -> Geschäftsführung = Dr. Heinz Ketchup
    Musterdorf -> Personalabteilung = Linda Strumpf
    Musterdorf -> Buchhaltung = Dr. Geldschneider
    Aber das ist doch genau was ich Oben erklärt habe.
    Setz mal anstatt Mitarbeiter -> Musterstadt, Musterberg, Musterhausen, Musterdorf ein

    Das war doch nur eine Erklärung die du jetzt auf deine Bedürfnisse anpassen kannst.

    Mit den anderen ComboBoxen ist es dann das gleiche.

    Nur noch umsetzten, dann bist du doch schon soweit.

    Das einzige was fehlt
    woher sollen die Daten kommen ?
    Aus Variablen oder aus Dateien (CSV) oder aus einer Daten Bank ?

    Bernd

    Bernd schrieb:

    Aber das ist doch genau was ich Oben erklärt habe.
    Setz mal anstatt Mitarbeiter -> Musterstadt, Musterberg, Musterhausen, Musterdorf ein

    Das war doch nur eine Erklärung die du jetzt auf deine Bedürfnisse anpassen kannst.

    Mit den anderen ComboBoxen ist es dann das gleiche.

    Nur noch umsetzten, dann bist du doch schon soweit.

    Das einzige was fehlt
    woher sollen die Daten kommen ?
    Aus Variablen oder aus Dateien (CSV) oder aus einer Daten Bank ?

    Bernd




    Hm, naja ich bin ziemlich neu in dieser Welt.... :)

    Ich weis daher nicht so viel mit anzufangen.... vielleicht kannst du mir ja mal einen vollständigen Code basteln, den ich dann probieren kann.... Die Werte sollen schon fest in den ComboBoxen unter (Eigenschaften->Items-> Auflistung) stehen und dann entsprechend in Abhängigkeit ausgewählt werden können.... :)

    ?(
    Das ist momentan mein Code....

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    3. Me.Close()
    4. End Sub
    5. Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    6. End Sub
    7. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
    8. End Sub
    9. Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
    10. If ComboBox2.SelectedIndex = 0 Then
    11. ComboBox3.Items.Clear()
    12. ComboBox3.Items.Add("Geschäftsführer")
    13. End If
    14. If ComboBox2.SelectedIndex = 1 Then
    15. ComboBox3.Items.Clear()
    16. ComboBox3.Items.Add("Buchhalter")
    17. End If
    18. If ComboBox2.SelectedIndex = 2 Then
    19. ComboBox3.Items.Clear()
    20. ComboBox3.Items.Add("Personalverwalter")
    21. End If
    22. End Sub
    23. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    24. If ComboBox1.SelectedIndex = 0 Then
    25. ComboBox2.Items.Clear()
    26. ComboBox2.Items.Add("Geschäftsführung")
    27. End If
    28. If ComboBox1.SelectedIndex = 1 Then
    29. ComboBox2.Items.Clear()
    30. ComboBox2.Items.Add("Buchhaltung")
    31. End If
    32. If ComboBox1.SelectedIndex = 2 Then
    33. ComboBox2.Items.Clear()
    34. ComboBox2.Items.Add("Personalwesen")
    35. End If
    36. End Sub
    37. Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged
    38. End Sub
    39. End Class



    Wenn ich in der CB1 Standort (Musterhausen) auswähle, dann kommt auch in CB2 Geschäftsführung, in CB3 Geschäftsführer.

    Wähle ich in der CB 1 Standort (Musterberg), dann kommt in der CB2 Buchhaltung, aber in der CB3 Geschäftsführer statt Buchhalter.



    Was mache ich denn falsch?
    ?( ?( ?(
    zwei ComboBoxen auf die Form und den Code in die Form

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim ComboBox2_Liste As List(Of String) = New List(Of String)
    3. Dim ComboBox2_Liste_II As List(Of String) = New List(Of String)
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. ComboBox2_Liste.Add("Rechnungsabteilung")
    6. ComboBox2_Liste.Add("Mahnwesen")
    7. ComboBox2_Liste_II.Add("Buchhaltung")
    8. ComboBox2_Liste_II.Add("Lagerwesen")
    9. ComboBox1.Items.Add("Musterstadt")
    10. ComboBox1.Items.Add("Heiligenhausen")
    11. End Sub
    12. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    13. ComboBox2.Items.Clear()
    14. If ComboBox1.SelectedIndex = 0 Then
    15. ComboBox2.Items.AddRange(ComboBox2_Liste.ToArray)
    16. Else
    17. ComboBox2.Items.AddRange(ComboBox2_Liste_II.ToArray)
    18. End If
    19. End Sub
    20. End Class
    Das mit dem If ist nie so schön.
    Geht man mit Select Case daran ist es übersichtlicher.

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged
    3. ComboBox2.Items.Clear()
    4. ComboBox3.Items.Clear()
    5. Select Case ComboBox1.Selected.Index
    6. Case 0
    7. ComboBox2.Items.Add("Geschäftsführung")
    8. Case 1
    9. ComboBox2.Items.Add("Buchhaltung")
    10. Case 2
    11. ComboBox2.Items.Add("Personalwesen")
    12. End Select
    13. Das geliche dann hier mit der anderen ComboBox
    14. End Sub


    Wenn du nur ein Event abfragst. also nehmen wir an das der ComboBox1
    bleiben falsche Werte in den anderen ComboBoxen stehen.

    deshalb, wenn sich die erste ComboBox ändert, stimmt ComboBox2 und 3 auch nicht mehr.
    Also direkt löschen und wenn dann schon möglich, neu bestücken.

    Das oben ist nur ein gekürztes Beispiel. Die Logig greift aber noch nicht ganz.
    Wenn du nun ComboBox 2 ändertst.........

    bischen überlegen dann kommst du drauf