Nach Listbox-Auswahl OK-Button True

Hallo,

ich habe folgendes Problem. Ich habe eine Listbox mit verschiedenen Auswahlmöglichkeiten und einen OK-Button um diese Auswahl zu bearbeiten. Es soll so sein, dass erst wenn irgendwas ausgewählt ist, der OK-Button-Click möglich ist. Die Einstellung Enabled beim Button habe ich auf False gestellt. Mit folgendem Code versuche ich ihn nun auf True bzw falls nix mehr markiert ist auf False zu stellen.

Private Sub ListBox1\_Click()

 With ListBox1
 For i = 0 To .ListCount - 1
 If .Selected(i) = True Then
 btOK.Enabled = True
 Else
 btOK.Enabled = False
 End If
 Next i

End Sub

Irgendwie hat das aber nicht funktioniert, der Button beleibt die ganze Zeit False. Kann mir da jemand helfen?

Danke im vorraus!

Werner

Hallo,

Private Sub ListBox1\_Click()

 With ListBox1
 For i = 0 To .ListCount - 1
 If .Selected(i) = True Then
 btOK.Enabled = True
 Else
 btOK.Enabled = False
 End If
 Next i

End Sub

eine selektierte Zeile wird gefunden, der Button eingeschaltet. Wenn die nächste Zeile nicht selektiert ist, wird der Button wieder abgeschaltet, deshalb klappt das so nicht.

Änderung:

Private Sub ListBox1\_Click()

 With ListBox1
 btOK.Enabled = False
 For i = 0 To .ListCount - 1
 If .Selected(i) = True Then
 btOK.Enabled = True
 Exit Sub 
 End If
 Next
End Sub

Das sollte gehen.

Gruß, Rainer

Funktioniert nicht im SelectMulti-Modus
Vielen Dank für die Hilfe.

Es ergibt sich jetzt aber an weiteres Problem, der Code funktioniert nur, wenn die Listbox im SelecetSingle Modus ist.

Habe mein Programm aber schon so erweitert, dass ich mit der Listbox im SelectMulti arbeiten möchte. Hast du mir da vielleicht nochmal an Tipp?

Gruß Werner

Hallo,

Es ergibt sich jetzt aber an weiteres Problem, der Code
funktioniert nur, wenn die Listbox im SelecetSingle Modus ist.

wieso?

Habe mein Programm aber schon so erweitert, dass ich mit der
Listbox im SelectMulti arbeiten möchte. Hast du mir da
vielleicht nochmal an Tipp?

Hmmm, ich habe mal ein Beispiel gebaut, List1.Multiselect steht auf 2.

Option Explicit

Private Sub Command1\_Click()
 Dim i As Integer
 For i = 0 To 20
 List1.AddItem i
 Next
End Sub

Private Sub List1\_Click()
 Dim i As Integer
 Command2.Enabled = False
 For i = 0 To List1.ListCount - 1
 If List1.Selected(i) Then
 Command2.Enabled = True
 Exit Sub
 End If
 Next
End Sub

Geht. Wenn ich Zeilen selektiere geht der Button an, ist keine Zeile mehr selektiert, geht er wieder aus. Bei mir geht’s, beschreibe mal Dein Problem genauer.

Gruß, Rainer

Hi,

also ich habe dein Beispiel bei mir in ein neues Projekt kopiert und getestet. Leider funktionierte dies auch nicht. Der Button wurde nur aktiviert, wenn ich im Multiselect auf 0 war. Bei 1 und 2 wurde zwar der Button quasi auf Default gestellt, aber er ist immer noch deaktiviert. So ist es bei meinem Programm auch. Button geht auf Default, aber ist deaktiviert.

Hast du sonst noch irgendwelchen Einstellungen gemacht?

Gruß Werner

Hallo,

also ich habe dein Beispiel bei mir in ein neues Projekt
kopiert und getestet. Leider funktionierte dies auch nicht.
Der Button wurde nur aktiviert, wenn ich im Multiselect auf 0
war. Bei 1 und 2 wurde zwar der Button quasi auf Default
gestellt, aber er ist immer noch deaktiviert. So ist es bei
meinem Programm auch. Button geht auf Default, aber ist
deaktiviert.

Was ist in diesem Zusammenhang ‚Default‘? Der Button ist entweder aktiv (Schrift ist schwarz) oder nicht (Schrift ist grau). Einen anderen Zustand kenne ich für ‚Command‘ nicht.

Hast du sonst noch irgendwelchen Einstellungen gemacht?

Nein, Nur Multiselect auf 2, alles andere ist unverändert.
Wenn der Code einfach so läuft, musst Du mit VB5/VB6 arbeiten, aber ich frage trotzdem noch mal, ist doch VB6, oder?

Gruß, Rainer

Ok, mein Fehler hätte ich besser beschreiben müssen. Also der Button ist nicht aktiv und die Schrift ist grau.

Mit Default meine ich, dass der Button nen kleinen schwarzen Rahmen bekommt nachdem ich was in der Listbox angeklickt habe, die Schrift bleibt aber grau. Keine Ahnung wie ich das besser erklären soll, finds auch relativ komisch da der Code stimmen dürfte.

Ich arbeite mit VB6.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Werner,

Ok, mein Fehler hätte ich besser beschreiben müssen.

jetzt hab’ ich’s ja verstanden. Das ist schon OK so, manchmal bin ich bei so etwas auch schwer von Begriff, störe Dich einfach nicht an meinen Fragen. :smile:

Also der Button ist nicht aktiv und die Schrift ist grau.

Mit Default meine ich, dass der Button nen kleinen schwarzen
Rahmen bekommt nachdem ich was in der Listbox angeklickt habe,
die Schrift bleibt aber grau. Keine Ahnung wie ich das besser
erklären soll, finds auch relativ komisch da der Code stimmen
dürfte.

Ja, ich habe das ja gerade ausprobiert, geht. Ich mach’s schnell noch einmal und maile Dir .frm und .vbp. Das sind ja nur ein paar Byte, das wird kein großer Anhang. Eventuell steht bei mir ja in den Voreinstellungen etwas anders und Du findest den Unterschied.

Gruß, Rainer

Vielen Dank!
Hab mir deine files mal angeschaut und es hat geklappt!

Mein Problem besteht aber immer noch, denn dort wo ich den Code brauche, arbeite ich in einer VBA Umgebung und da geht er immer noch nicht… :smile:

Hier der Code der im Visual Studio 6.0 geht:

Private Sub btFuellen\_Click()
 Dim i As Integer
 For i = 0 To 20
 ListBox1.AddItem i
 Next
End Sub

Private Sub btOK\_Click()
 MsgBox ("Hi")
End Sub

Private Sub ListBox1\_Click()
 Dim i As Integer
 btOK.Enabled = False
 For i = 0 To ListBox1.ListCount - 1
 If ListBox1.Selected(i) Then
 btOK.Enabled = True
 Exit Sub
 End If
 Next i
End Sub

Hallo Werner,

Mein Problem besteht aber immer noch, denn dort wo ich den
Code brauche, arbeite ich in einer VBA Umgebung und da geht er
immer noch nicht… :smile:

Hier der Code der im Visual Studio 6.0 geht:

OK, der Code ist ja auch in Ordnung, der muss funktionieren.
Wie sieht demm nun der Code aus, der nicht funktioniert?

Gruß, Rainer

OK, der Code ist ja auch in Ordnung, der muss funktionieren.
Wie sieht demm nun der Code aus, der nicht funktioniert?

Tja, der Code der nicht geht, sieht genauso aus wie der Code der geht. Klingt komisch ist aber so. Dürfte irgendwie mit meiner VBA-Editor Umgebung zusammenhängen, dass er da Probleme hervorbringt.

Hallo Werner,

Tja, der Code der nicht geht, sieht genauso aus wie der Code
der geht. Klingt komisch ist aber so. Dürfte irgendwie mit
meiner VBA-Editor Umgebung zusammenhängen, dass er da Probleme
hervorbringt.

der Code muss in VBA anders aussehen, da heißen die Steuerelemente meist anders (außer Du hast die Namen geändert). :smile:

Hast Du schon mal einen Stoppunkt gesetzt und Dir angesehen, was genau passiert? Füge mal eine zusätzliche variable ein und sieh Dir deren Inhalt an.

Private Sub ListBox1\_Click()
 Dim i As Integer
 Dim Flag As Boolean
 btOK.Enabled = False
 For i = 0 To ListBox1.ListCount - 1
 Flag = ListBox1.Selected(i) 
 If ListBox1.Selected(i) Then
 btOK.Enabled = True
 Exit Sub
 End If
 Next i
End Sub

Merke Dir, welche Zeile Du selektiert hast und prüfe, ob die Zeile als selektiert erkannt wird, ob die Prüfung erfolgreich verläuft und ob der Befehl den Button einzuschalten abgearbeitet wird.

Gruß, Rainer

Nicht mal das funktioniert bei mir.

Private Sub ListBox1\_Click()
 MsgBox ("Habe in die ListBox geklickt!")
End Sub

Lösung gefunden!
So hab jetzt endlich die Lösung gefunden! Ist eigentlich relativ einfach. Man muss statt ListBox1_Click -> ListBox1_Change verwenden damit der Event erkannt wird, bei der Einstellung Multiselect auf 1(MultiSelectMulti).

Private Sub ListBox1\_Change()

 Dim i As Integer

 btOK.Enabled = False
 For i = 0 To ListBox1.ListCount - 1
 If ListBox1.Selected(i) Then
 btOK.Enabled = True
 Exit Sub
 End If
 Next i
End Sub

Trotzdem danke für die Hilfe.

Gruß Werner