gelöst 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:
01.
Private Sub Form_Load()
02.
03.
Autos.AddItem "Kleinwagen"
04.
Autos.AddItem "Mittelklassewagen"
05.
Autos.AddItem "Luxuslimousine"
06.
Autos.AddItem "Transporter"
07.
Autos.AddItem "Motorrad"
08.
Combo1.Clear
09.
Combo2.Clear
10.
11.
End Sub
01.
Private Sub Autos_Click()
02.
03.
Select Case Autos.ListIndex
04.
05.
Case 0
06.
07.
Text1 = "Kleinwagen ist ausgewählt"
08.
09.
Case 1
10.
11.
MsgBox "Mittelklassewagen ist ausgewählt"
12.
13.
Case 4
14.
15.
Combo1.AddItem "Reifen"
16.
Combo1.AddItem "Tank"
17.
Combo1.AddItem "Sitzbank"
18.
Combo1.ListIndex = 0
19.
20.
End Select
21.
22.
23.
Select Case Combo1.ListIndex
24.
25.
Case 0
26.
27.
MsgBox "Reifen"
28.
Combo2.AddItem "Felge"
29.
Combo2.AddItem "Ventil"
30.
Combo2.AddItem "Speiche"
31.
Combo2.ListIndex = 0
32.
33.
Case 1
34.
35.
MsgBox "Ventil"
36.
37.
End Select
38.
39.
End Sub
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
18 Antworten
- LÖSUNG 76109 schreibt am 12.03.2010 um 12:48:24 Uhr
- LÖSUNG TsukiSan schreibt am 12.03.2010 um 23:47:27 Uhr
- LÖSUNG skid schreibt am 15.03.2010 um 08:34:58 Uhr
- LÖSUNG skid schreibt am 15.03.2010 um 08:33:09 Uhr
- LÖSUNG skid schreibt am 15.03.2010 um 14:41:56 Uhr
- LÖSUNG 76109 schreibt am 15.03.2010 um 17:48:06 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 08:24:12 Uhr
- LÖSUNG 76109 schreibt am 16.03.2010 um 09:22:20 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 09:33:51 Uhr
- LÖSUNG 76109 schreibt am 16.03.2010 um 12:11:57 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 09:33:51 Uhr
- LÖSUNG 76109 schreibt am 16.03.2010 um 09:22:20 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 08:24:12 Uhr
- LÖSUNG 76109 schreibt am 15.03.2010 um 17:48:06 Uhr
- LÖSUNG 76109 schreibt am 15.03.2010 um 17:44:12 Uhr
- LÖSUNG TsukiSan schreibt am 16.03.2010 um 13:36:26 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 13:55:53 Uhr
- LÖSUNG 76109 schreibt am 16.03.2010 um 14:30:38 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 14:37:10 Uhr
- LÖSUNG 76109 schreibt am 17.03.2010 um 10:59:43 Uhr
- LÖSUNG TsukiSan schreibt am 16.03.2010 um 23:10:05 Uhr
- LÖSUNG skid schreibt am 18.03.2010 um 12:11:49 Uhr
- LÖSUNG skid schreibt am 16.03.2010 um 14:37:10 Uhr
- LÖSUNG TsukiSan schreibt am 16.03.2010 um 13:36:26 Uhr
- LÖSUNG skid schreibt am 15.03.2010 um 14:41:56 Uhr
- LÖSUNG TsukiSan schreibt am 12.03.2010 um 23:47:27 Uhr
LÖSUNG 12.03.2010 um 12:48 Uhr
Hallo skid!
In etwa so:
Oder das gleiche etwas anders:
Gruß Dieter
In etwa so:
01.
Private Sub Form_Load()
02.
Autos.AddItem "Kleinwagen"
03.
Autos.AddItem "Mittelklassewagen"
04.
Autos.AddItem "Luxuslimousine"
05.
Autos.AddItem "Transporter"
06.
Autos.AddItem "Motorrad"
07.
Autos.ListIndex = 0
08.
End Sub
09.
10.
Private Sub Autos_Change()
11.
Combo1.Clear: Combo2.Clear
12.
13.
Select Case Autos.ListIndex
14.
Case 0
15.
Combo1.AddItem "Kategorie 1"
16.
Combo1.AddItem "Kategorie 2"
17.
Combo1.AddItem "Kategorie 3"
18.
Case 1
19.
Combo1.AddItem "Kategorie 1"
20.
Combo1.AddItem "Kategorie 2"
21.
Combo1.AddItem "Kategorie 3"
22.
Case 2
23.
Combo1.AddItem "Kategorie 1"
24.
Combo1.AddItem "Kategorie 2"
25.
Combo1.AddItem "Kategorie 3"
26.
Case 3
27.
Combo1.AddItem "Kategorie 1"
28.
Combo1.AddItem "Kategorie 2"
29.
Combo1.AddItem "Kategorie 3"
30.
Case 4
31.
Combo1.AddItem "Kategorie 1"
32.
Combo1.AddItem "Kategorie 2"
33.
Combo1.AddItem "Kategorie 3"
34.
End Select
35.
End Sub
36.
37.
Private Sub Combo1_Change()
38.
Combo2.Clear
39.
40.
Select Case Combo1.ListIndex
41.
Case 0
42.
Combo2.AddItem "Teile 1"
43.
Combo2.AddItem "Teile 2"
44.
Combo2.AddItem "Teile 3"
45.
Case 1
46.
Combo2.AddItem "Teile 1"
47.
Combo2.AddItem "Teile 2"
48.
Combo2.AddItem "Teile 3"
49.
Case 2
50.
Combo2.AddItem "Teile 1"
51.
Combo2.AddItem "Teile 2"
52.
Combo2.AddItem "Teile 3"
53.
End Select
54.
End Sub
55.
56.
Private Sub Combo2_Change()
57.
Select Case Combo2.ListIndex
58.
Case 0
59.
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
60.
Case 1
61.
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
62.
Case 2
63.
MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
64.
End Select
65.
End Sub
01.
Private Sub Form_Load()
02.
Dim Items As Variant
03.
04.
Items = Array("Kleinwagen", "Mittelklassewagen", "Luxuslimousine", "Transporter", "Motorrad")
05.
06.
Call InitComboBox(Autos, Items)
07.
08.
Autos.ListIndex = 0
09.
End Sub
10.
11.
Private Sub Autos_Change()
12.
Combo1.Clear: Combo2.Clear
13.
14.
Select Case Autos.ListIndex
15.
Case 0: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
16.
Case 1: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
17.
Case 2: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
18.
Case 3: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
19.
Case 4: Call InitComboBox(Combo1, Array("Kategorie 1", "Kategorie 2", "Kategorie 3"))
20.
End Select
21.
End Sub
22.
23.
Private Sub Combo1_Change()
24.
Combo2.Clear
25.
26.
Select Case Combo1.ListIndex
27.
Case 0: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
28.
Case 1: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
29.
Case 2: Call InitComboBox(Combo2, Array("Teile 1", "Teile 2", "Teile 3"))
30.
End Select
31.
End Sub
32.
33.
Private Sub Combo2_Change()
34.
Select Case Combo2.ListIndex
35.
Case 0: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
36.
Case 1: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
37.
Case 2: MsgBox "Auswahl: " & Autos.Text & ";" & Combo1.Text & ";" & Combo2.Text
38.
End Select
39.
End Sub
40.
41.
Private Sub InitComboBox(ByRef ComboBox, ByRef Items)
42.
Dim i As Integer
43.
44.
For i = 0 To UBound(Items): ComboBox.AddItem Items(i): Next
45.
End Sub
LÖSUNG 12.03.2010 um 23:47 Uhr
Hallo skid,
was steht denn in deinem "Click-Ereignis" von Combobox1?
Gruss
Tsuki
was steht denn in deinem "Click-Ereignis" von Combobox1?
Gruss
Tsuki
LÖSUNG 15.03.2010 um 08:33 Uhr
Moin Dieter,
danke für den Code - habe es zum laufen gebracht !
Ich musste allerdings statt dem "Change" das "Click"- Ereignis verwenden - andersrum hat es irgendwie nicht funktioniert1
SKID
LÖSUNG 15.03.2010 um 08:34 Uhr
Zitat von TsukiSan:
Hallo skid,
was steht denn in deinem "Click-Ereignis" von Combobox1?
Gruss
Tsuki
Hallo skid,
was steht denn in deinem "Click-Ereignis" von Combobox1?
Gruss
Tsuki
Hi Tsuki,
ich glaube das war u.a. noch das, was bei meinem Code gefehlt hat.....das "Click-Ereignis" von Combobox1 !
Gruß
SKID
LÖSUNG 15.03.2010 um 14:41 Uhr
Hätte da noch eine Frage......
Ich habe 2 Comboboxen die sich in einem "Click"-Ereignis eines Command-Buttons befinden.
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.
Vielleicht hätte ja jemand eine Lösung ?
Gruß
SKID
Ich habe 2 Comboboxen die sich in einem "Click"-Ereignis eines Command-Buttons befinden.
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.
Vielleicht hätte ja jemand eine Lösung ?
Gruß
SKID
LÖSUNG 15.03.2010 um 17:44 Uhr
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
LÖSUNG 15.03.2010 um 17:48 Uhr
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.
01.
Combo1.Locked = True 'Gesperrt
02.
Combo1.Locked = False 'Freigegeben
LÖSUNG 16.03.2010 um 08:24 Uhr
Zitat von 76109:
Hallo Skid!
> 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:
Gruß Dieter
Hallo Skid!
> 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:
01.
> Combo1.Locked = True 'Gesperrt
02.
> Combo1.Locked = False 'Freigegeben
03.
>
Hallo Dieter,
das hat leider nicht funktioniert.
Die zweite Combobox bleibt weiterhin aktiv und lässt sich aufklappen um eine Auswahl zu treffen.
Gruß
SKID
LÖSUNG 16.03.2010 um 09:22 Uhr
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
LÖSUNG 16.03.2010 um 09:33 Uhr
Zitat von 76109:
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
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
Hi,
das mit erster und zweiter Combo war nur allgemein gesagt - also keine bestimmte.
SKID
LÖSUNG 16.03.2010 um 12:11 Uhr
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
LÖSUNG 16.03.2010 um 13:36 Uhr
Es sollte sich die Combo-Box mit deren Eigenschaft "Enabled" sperren (False) und entsperren (True) lassen.
also:
Gruss
Tsuki
also:
01.
Combo1.Enabled = False
02.
'bzw.
03.
Combo1.Enabled = True
Tsuki
LÖSUNG 16.03.2010 um 13:55 Uhr
Zitat von TsukiSan:
Es sollte sich die Combo-Box mit deren Eigenschaft "Enabled" sperren (False) und entsperren (True) lassen.
also:
Gruss
Tsuki
Es sollte sich die Combo-Box mit deren Eigenschaft "Enabled" sperren (False) und entsperren (True) lassen.
also:
01.
> Combo1.Enabled = False
02.
> 'bzw.
03.
> Combo1.Enabled = True
04.
>
Tsuki
Hi,
ja, das tut es auch aber erst dann wenn ich den Command-Button geklickt habe.
Die Combo-Boxen haben keine Click-Ereignisse.
Sieht so aus....in vereinfachter Form....
01.
Public Sub Command1_Click()
02.
03.
Select Case Combo1.ListIndex
04.
05.
Case 0
06.
07.
Hier kann man irgendwas ausgewählen
08.
09.
End Select
10.
11.
Select Case Combo2.ListIndex
12.
13.
Case 0
14.
15.
Hier kann man irgendwas ausgewählen
16.
17.
End Select
18.
19.
End Sub
Danach klicke ich meinen Command-Button um die Verarbeitung zu starten
Gruß
SKID
LÖSUNG 16.03.2010 um 14:30 Uhr
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
LÖSUNG 16.03.2010 um 14:37 Uhr
Eine andere Möglichkeit wäre, nach dem Command-Button-Klick, abzufragen ob in mehr als einer Combobox was ausgewählt ist.
Vielleicht habt ihr ja dazu eine Idee ?!
Gruß
SKID
Vielleicht habt ihr ja dazu eine Idee ?!
Gruß
SKID
LÖSUNG 16.03.2010 um 23:10 Uhr
Hallo didi1954,
macht ja nix! Viel schlimmer ist weiter untern:
Hierbei frage ich mich, ob VBA zulässt, mehreren Steuerelemente den Fokus zu geben
Gruss
Tsuki
macht ja nix! Viel schlimmer ist weiter untern:
Eine andere Möglichkeit wäre, nach dem Command-Button-Klick, abzufragen ob in mehr als einer Combobox was
ausgewählt ist.Hierbei frage ich mich, ob VBA zulässt, mehreren Steuerelemente den Fokus zu geben
Gruss
Tsuki
LÖSUNG 17.03.2010 um 10:59 Uhr
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
LÖSUNG 18.03.2010 um 12:11 Uhr
Ich habe es jetzt so gelöst das ich jede einzelne Combo-Box abfrage ob was ausgewählt ist.
Das ganze ist bestimmt nicht ganz glücklich bzw. Eleganz gelöst aber es funktioniert.
Dank Euch für Euere Hilfe!!
SKID
Das ganze ist bestimmt nicht ganz glücklich bzw. Eleganz gelöst aber es funktioniert.
Dank Euch für Euere Hilfe!!
SKID
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte