skid
Goto Top

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:

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

Content-Key: 138050

Url: https://administrator.de/contentid/138050

Printed on: April 18, 2024 at 20:04 o'clock

Mitglied: 76109
76109 Mar 12, 2010 at 11:48:24 (UTC)
Goto Top
Hallo skid!

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
Oder das gleiche etwas anders:
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
Member: TsukiSan
TsukiSan Mar 12, 2010 at 22:47:27 (UTC)
Goto Top
Hallo skid,

was steht denn in deinem "Click-Ereignis" von Combobox1?

Gruss
Tsuki
Member: skid
skid Mar 15, 2010 at 07:33:09 (UTC)
Goto Top
Zitat von @76109:
Hallo skid!

In etwa so:
>.......
> 

Gruß Dieter



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
Member: skid
skid Mar 15, 2010 at 07:34:58 (UTC)
Goto Top
Zitat von @TsukiSan:
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
Member: skid
skid Mar 15, 2010 at 13:41:56 (UTC)
Goto Top
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
Mitglied: 76109
76109 Mar 15, 2010 at 16:44:12 (UTC)
Goto Top
Zitat von @skid:
danke für den Code - habe es zum laufen gebracht !
Freut michface-wink
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
Mitglied: 76109
76109 Mar 15, 2010 at 16:48:06 (UTC)
Goto Top
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:
Combo1.Locked = True    'Gesperrt    
Combo1.Locked = False   'Freigegeben  

Gruß Dieter
Member: skid
skid Mar 16, 2010 at 07:24:12 (UTC)
Goto Top
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:
> Combo1.Locked = True    'Gesperrt    
> Combo1.Locked = False   'Freigegeben  
> 

Gruß Dieter

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
Mitglied: 76109
76109 Mar 16, 2010 at 08:22:20 (UTC)
Goto Top
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
Member: skid
skid Mar 16, 2010 at 08:33:51 (UTC)
Goto Top
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

Hi,

das mit erster und zweiter Combo war nur allgemein gesagt - also keine bestimmte.

SKID
Mitglied: 76109
76109 Mar 16, 2010 at 11:11:57 (UTC)
Goto Top
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
Member: TsukiSan
TsukiSan Mar 16, 2010 at 12:36:26 (UTC)
Goto Top
Es sollte sich die Combo-Box mit deren Eigenschaft "Enabled" sperren (False) und entsperren (True) lassen.

also:
Combo1.Enabled = False
'bzw.  
Combo1.Enabled = True

Gruss
Tsuki
Member: skid
skid Mar 16, 2010 at 12:55:53 (UTC)
Goto Top
Zitat von @TsukiSan:
Es sollte sich die Combo-Box mit deren Eigenschaft "Enabled" sperren (False) und entsperren (True) lassen.

also:
> Combo1.Enabled = False
> 'bzw.  
> Combo1.Enabled = True
> 

Gruss
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....

Public Sub Command1_Click()

       Select Case Combo1.ListIndex

            Case 0
                 
                               Hier kann man irgendwas ausgewählen
     
       End Select

       Select Case Combo2.ListIndex

            Case 0
                 
                               Hier kann man irgendwas ausgewählen
     
       End Select

End Sub

Wird in der ersten Combo was ausgewählt soll die andere deaktiviert werden.
Danach klicke ich meinen Command-Button um die Verarbeitung zu starten


Gruß
SKID
Mitglied: 76109
76109 Mar 16, 2010 at 13:30:38 (UTC)
Goto Top
Hallo Tsuki!

Stimmt, die habe ich doch glatt verwechselt. Mit Locked wird die Eingabe gesperrt und mit Enabled wird ComboBox ausgegraut angezeigt.

Gruß Dieter
Member: skid
skid Mar 16, 2010 at 13:37:10 (UTC)
Goto Top
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
Member: TsukiSan
TsukiSan Mar 16, 2010 at 22:10:05 (UTC)
Goto Top
Hallo didi1954,

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 face-smile

Gruss
Tsuki
Mitglied: 76109
76109 Mar 17, 2010 at 09:59:43 (UTC)
Goto Top
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
Member: skid
skid Mar 18, 2010 at 11:11:49 (UTC)
Goto Top
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