VB6 - Wie Comboboxen verschachteln ?
Moin,
ich versuche gerade 3 Comboboxen in Abhänigkeit voneinander zu befüllen und je nach dem was ausgewählt ist eine MsgBox anzuzeigen.....nur so zum Testen des ganzen.
Das ganze sieht so aus:
Zuerst wird die erste Combobox gefüllt:
Dann geht´s so weiter...
Wähle ich nun den Eintrag "Motorrad" aus, wird die Combobox1 befüllt, steht auf dem ersten Eintrag "Reifen", die MsgBox erscheint und Combo2 wird befüllt und steht auf "Felge".
Wähle ich nun in der Combobox1 "Ventil" aus pasiert nichts mehr obwohl da doch die nächste MsgBox erscheinen sollte.
Vielleicht kann mir ja jemand sagen was ich übersehen habe bzw. was ich falsch mache ?
SKID
ich versuche gerade 3 Comboboxen in Abhänigkeit voneinander zu befüllen und je nach dem was ausgewählt ist eine MsgBox anzuzeigen.....nur so zum Testen des ganzen.
Das ganze sieht so aus:
Zuerst wird die erste Combobox gefüllt:
Private Sub Form_Load()
Autos.AddItem "Kleinwagen"
Autos.AddItem "Mittelklassewagen"
Autos.AddItem "Luxuslimousine"
Autos.AddItem "Transporter"
Autos.AddItem "Motorrad"
Combo1.Clear
Combo2.Clear
End Sub
Dann geht´s so weiter...
Private Sub Autos_Click()
Select Case Autos.ListIndex
Case 0
Text1 = "Kleinwagen ist ausgewählt"
Case 1
MsgBox "Mittelklassewagen ist ausgewählt"
Case 4
Combo1.AddItem "Reifen"
Combo1.AddItem "Tank"
Combo1.AddItem "Sitzbank"
Combo1.ListIndex = 0
End Select
Select Case Combo1.ListIndex
Case 0
MsgBox "Reifen"
Combo2.AddItem "Felge"
Combo2.AddItem "Ventil"
Combo2.AddItem "Speiche"
Combo2.ListIndex = 0
Case 1
MsgBox "Ventil"
End Select
End Sub
Wähle ich nun den Eintrag "Motorrad" aus, wird die Combobox1 befüllt, steht auf dem ersten Eintrag "Reifen", die MsgBox erscheint und Combo2 wird befüllt und steht auf "Felge".
Wähle ich nun in der Combobox1 "Ventil" aus pasiert nichts mehr obwohl da doch die nächste MsgBox erscheinen sollte.
Vielleicht kann mir ja jemand sagen was ich übersehen habe bzw. was ich falsch mache ?
SKID
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 138050
Url: https://administrator.de/contentid/138050
Ausgedruckt am: 05.11.2024 um 19:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo skid!
In etwa so:
Oder das gleiche etwas anders:
Gruß Dieter
In etwa so:
Private Sub Form_Load()
Autos.AddItem "Kleinwagen"
Autos.AddItem "Mittelklassewagen"
Autos.AddItem "Luxuslimousine"
Autos.AddItem "Transporter"
Autos.AddItem "Motorrad"
Autos.ListIndex = 0
End Sub
Private Sub Autos_Change()
Combo1.Clear: Combo2.Clear
Select Case Autos.ListIndex
Case 0
Combo1.AddItem "Kategorie 1"
Combo1.AddItem "Kategorie 2"
Combo1.AddItem "Kategorie 3"
Case 1
Combo1.AddItem "Kategorie 1"
Combo1.AddItem "Kategorie 2"
Combo1.AddItem "Kategorie 3"
Case 2
Combo1.AddItem "Kategorie 1"
Combo1.AddItem "Kategorie 2"
Combo1.AddItem "Kategorie 3"
Case 3
Combo1.AddItem "Kategorie 1"
Combo1.AddItem "Kategorie 2"
Combo1.AddItem "Kategorie 3"
Case 4
Combo1.AddItem "Kategorie 1"
Combo1.AddItem "Kategorie 2"
Combo1.AddItem "Kategorie 3"
End Select
End Sub
Private Sub Combo1_Change()
Combo2.Clear
Select Case Combo1.ListIndex
Case 0
Combo2.AddItem "Teile 1"
Combo2.AddItem "Teile 2"
Combo2.AddItem "Teile 3"
Case 1
Combo2.AddItem "Teile 1"
Combo2.AddItem "Teile 2"
Combo2.AddItem "Teile 3"
Case 2
Combo2.AddItem "Teile 1"
Combo2.AddItem "Teile 2"
Combo2.AddItem "Teile 3"
End Select
End Sub
Private Sub Combo2_Change()
Select Case Combo2.ListIndex
Case 0
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
Case 1
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
Case 2
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
End Select
End Sub
Private Sub Form_Load()
Dim Items As Variant
Items = Array("Kleinwagen", "Mittelklassewagen", "Luxuslimousine", "Transporter", "Motorrad")
Call InitComboBox(Autos, Items)
Autos.ListIndex = 0
End Sub
Private Sub Autos_Change()
Combo1.Clear: Combo2.Clear
Select Case Autos.ListIndex
Case 0: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
Case 1: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
Case 2: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
Case 3: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
Case 4: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
End Select
End Sub
Private Sub Combo1_Change()
Combo2.Clear
Select Case Combo1.ListIndex
Case 0: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
Case 1: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
Case 2: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
End Select
End Sub
Private Sub Combo2_Change()
Select Case Combo2.ListIndex
Case 0: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
Case 1: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
Case 2: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
End Select
End Sub
Private Sub InitComboBox(ByRef ComboBox, ByRef Items)
Dim i As Integer
For i = 0 To UBound(Items): ComboBox.AddItem Items(i): Next
End Sub
Gruß Dieter
Freut mich
Gruß Dieter
Ich musste allerdings statt dem "Change" das "Click"- Ereignis verwenden - andersrum hat es irgendwie nicht funktioniert1
Yepp, ich habe den Code auch in VBA gemacht und da ist es standardmäßig Change.Gruß Dieter
Hallo Skid!
Gruß Dieter
Zitat von @skid:
Nun möchte ich gerne das wenn ich in einer Combobox einen Eintrag auswähle die andere Combobox gesperrt, so das man
nichts auswählen kann. Das ganze aber bevor ich den Command-Button geklickt habe.
Versuch mal mit:Nun möchte ich gerne das wenn ich in einer Combobox einen Eintrag auswähle die andere Combobox gesperrt, so das man
nichts auswählen kann. Das ganze aber bevor ich den Command-Button geklickt habe.
Combo1.Locked = True 'Gesperrt
Combo1.Locked = False 'Freigegeben
Gruß Dieter
Hallo Skid!
Also, wenn's bei der ComboBox1 funktioniert, dann musst Du das gleiche natürlich auch für die ComboBox2 auch machen.
Gruß Dieter
Also, wenn's bei der ComboBox1 funktioniert, dann musst Du das gleiche natürlich auch für die ComboBox2 auch machen.
Gruß Dieter
Hallo Skid!
Sorry, dann habe ich Dich wohl missverstanden. Da ich kein VB6 habe, kann ich Dir leider auch nicht sagen, wie es in Deiner VB-Umgebung definiert werden kann.
Gruß Dieter
Sorry, dann habe ich Dich wohl missverstanden. Da ich kein VB6 habe, kann ich Dir leider auch nicht sagen, wie es in Deiner VB-Umgebung definiert werden kann.
Gruß Dieter
Hallo Tsuki!
Stimmt, die habe ich doch glatt verwechselt. Mit Locked wird die Eingabe gesperrt und mit Enabled wird ComboBox ausgegraut angezeigt.
Gruß Dieter
Stimmt, die habe ich doch glatt verwechselt. Mit Locked wird die Eingabe gesperrt und mit Enabled wird ComboBox ausgegraut angezeigt.
Gruß Dieter
Hallo Skid!
Deine Vorgehensweise ist irgendwie der falsche Weg.
Wie Tsuki schon richtig erwähnt hat, kann immer nur ein Object den Fokus haben.
Ob in einer ComboBox eine Veränderung stattgefunden hat, kannst/solltest Du im Endeffekt nur in der ComboBox-Click-Routine erfassen. Wenn das Auswahlfeld in der ComboBox Leer ist, dann gibt ComBox.Value einen Leerstring "" zurück, ansonsten den Auswahl-Text. Dir steht aber auch die Möglichkeit offen, am Anfang des Formulars globale Variablen zu deklarieren z.B. Dim ComboBox1Click As Boolean und in dem CombBox-Click-Ereignis setzt Du diese Variable auf True und kannst diese Variable z.B. in Deinem Button_Click-Ereignis auf True/False prüfen und wieder auf False setzen. Sowas in der Art.
Die ComboBoxen in irgendwelcher Routine zu initialisieren ist eine Sache, aber alles andere, wird in den Click-Ereignissen der jeweiligen ComboBoxen geregelt und das Ergebnis gibt Dir die CombBox als ComboBox.Value zurück.
Gruß Dieter
Deine Vorgehensweise ist irgendwie der falsche Weg.
Wie Tsuki schon richtig erwähnt hat, kann immer nur ein Object den Fokus haben.
Ob in einer ComboBox eine Veränderung stattgefunden hat, kannst/solltest Du im Endeffekt nur in der ComboBox-Click-Routine erfassen. Wenn das Auswahlfeld in der ComboBox Leer ist, dann gibt ComBox.Value einen Leerstring "" zurück, ansonsten den Auswahl-Text. Dir steht aber auch die Möglichkeit offen, am Anfang des Formulars globale Variablen zu deklarieren z.B. Dim ComboBox1Click As Boolean und in dem CombBox-Click-Ereignis setzt Du diese Variable auf True und kannst diese Variable z.B. in Deinem Button_Click-Ereignis auf True/False prüfen und wieder auf False setzen. Sowas in der Art.
Die ComboBoxen in irgendwelcher Routine zu initialisieren ist eine Sache, aber alles andere, wird in den Click-Ereignissen der jeweiligen ComboBoxen geregelt und das Ergebnis gibt Dir die CombBox als ComboBox.Value zurück.
Gruß Dieter