Listbox 'klick' auslösen (VB6/SP6)

Hallo Wer-Weiss-Was’ler! :wink:

Ich habe folgendes Problem mit einer Listbox, um dessen Lösung ich irgendwie fleissig herumcodiere… *hmpf*

Die Listbox hat den Style 1 und verfügt somit über Kontrollkästchen, um eine Mehrfachauswahl zu ermöglichen. Die Liste selber wird zur Laufzeit „gefüllt“.
Nun ist es erforderlich, das einige Listenpunkte, wenn Sie denn angewählt werden, hinsichtlich eines Kriteriums überprüft werden.
Wenn dieses Kriterium nicht erfüllt ist, muss die Benutzerauswahl automatisch Rückgängig gemacht werden. - Und genau hier liegt das Problem!

Ich kann VB einfach nicht überreden die Benutzerauswahl aufzuheben oder präziser ausgedrückt:
Wie codiere ich einen Klick auf das Element x der Liste?
x = list1.ListIndex

Ich danke schon jetzt für eure Tips!

Liebe Grüße,
Ute

P.S.:
Der Benutzer bekommt nach der Rücksetzung natürlich einen Hinweis, das die Auswahl nicht gültig war und auch warum :wink:

Hallo Wer-Weiss-Was’ler! :wink:

Hallo Ute,

Ich habe folgendes Problem mit einer Listbox, um dessen Lösung
ich irgendwie fleissig herumcodiere… *hmpf*

Nunja schauen wir mal :wink:

Die Listbox hat den Style 1 und verfügt somit über
Kontrollkästchen, um eine Mehrfachauswahl zu ermöglichen. Die
Liste selber wird zur Laufzeit „gefüllt“.

Hmm, ich verstehe zwar nicht warum du nun die Kontrollkaestchen hast.
Willst du nur einen Mehrfach Auswahl haben, so setze den Style auf 0 und Multiselect auf 1(Simple) oder 2 ( Extended) Das tuts dann auch :smile:

Nun ist es erforderlich, das einige Listenpunkte, wenn Sie
denn angewählt werden, hinsichtlich eines Kriteriums überprüft
werden.

Sehe ich das richtig, das nur die Daten überprüfen willst, wenn das Kontrollkaestchen nicht aktiviert ist und ein Klick auf den Eintrag erfolgt, so das dann die Checkbox makiert wird?

Das koenntest du wiefolgt realisieren. Sobald in der Liste geklickt wird, wird das Klick Ereignis ausgelöst.

Private Sub List1\_Click()
 If List1.Selected(List1.ListIndex) Then
 'Ein haeckchen wurde gesetzt
 'Auf das Element kannst du nun via List1.List(list1.listindex) zugreifen
 'Dein Source Code
 Else
 'Es wurde kein Haeckchen gesetzt oder es wurde entfernt!
 'Dein Source Code
 End If
End Sub

Wenn dieses Kriterium nicht erfüllt ist, muss die
Benutzerauswahl automatisch Rückgängig gemacht werden. - Und

Auch das sollte nicht das Problem. Weise einfach der Eigenschaft Selected den Wert False zu :wink:
Bsp.

Private Sub List1\_Click()
 If List1.Selected(List1.ListIndex) Then
 'Ein haeckchen wurde gesetzt
 'Wir gehen mal von aus das EintragOk eine Function ist, die dir 
 'True oder False zurueckliefert. 
 'True = Eintrag darf Selectiert werden 
 'False = Not EintragOK = Eintrag darf nicht selektiert werden 
 if not(EintragOK) then List1.Selected(List1.ListIndex)=False 
 Else
 'Es wurde kein Haeckchen gesetzt oder es wurde entfernt!
 'Dein Source Code
 End If
End Sub

genau hier liegt das Problem!

Also wenn ich dich richtig verstanden habe, dann nicht mehr :smile:

Ich kann VB einfach nicht überreden die Benutzerauswahl
aufzuheben oder präziser ausgedrückt:
Wie codiere ich einen Klick auf das Element x der Liste?
x = list1.ListIndex

Willst du einfach einen Klick auf das sagen wir mal 5 Element simulieren, so mache das wiefolgt

 list1.listindex=4 ' Faengt ja bei 0 an zu zaehlen
 Call List1\_Click 'Und nun rufen wir die Sub auf :smile:

Ich danke schon jetzt für eure Tips!

Nichts zu danken :smile:

Liebe Grüße,
Ute

MfG Alex

P.S.:
Der Benutzer bekommt nach der Rücksetzung natürlich einen
Hinweis, das die Auswahl nicht gültig war und auch warum :wink:

Auch das kannst du mit Leichtihkeit realisieren.
Du siehst in meinem Bsp. wo ich die Auswahl zurueckgesetzt habe.
Schreibe einfach darunter dein Meldung die du ausgeben möchtest. Zum Bsp. in eine Messagebox

Private Sub List1\_Click()
Dim vRet as String
 If List1.Selected(List1.ListIndex) Then
 'Ein haeckchen wurde gesetzt
 'Wir gehen mal von aus das EintragOk eine Function ist, die dir 
 'eine Zeichenfolge zurueckliefertzurueckliefert. 
 'Zeichenfolge ="" = Eintrag darf Selectiert werden 
 'Zeichenfolge "" = Eintrag darf nicht selektiert werden 
 vRet=EintragOK(List1.List(List1.Listindex))
 If trim(vRet)"" then 
 List1.Selected(List1.ListIndex)=False 
 MsgBox vRet
 End if 
 Else
 'Es wurde kein Haeckchen gesetzt oder es wurde entfernt!
 'Dein Source Code
 End If
End Sub

Private Function EintragOK(vData as String) as String
 EintragOK=""
 if lcase(vdata)"ute" then EintragOK="Sie dürfen nur den Namen Ute auswählen"
End Function

MfG Alex

Hallo Alex

Hmm, ich verstehe zwar nicht warum du nun die
Kontrollkaestchen hast.
Willst du nur einen Mehrfach Auswahl haben, so setze den Style
auf 0 und Multiselect auf 1(Simple) oder 2 ( Extended) Das
tuts dann auch :smile:

Die von Dir beschriebene Listbox (Style =0, Multiselect 0) nutzt ich auch aber IMMER mit Multiselect = 0. Sieht der Anwender die Kontrollkästchen, so weiß er intuitiv das eine Mehrfachauswahl möglich ist, was bei den anderen nicht zwangsläufig der Fall ist.
Daher habe ich für mich beschlossen: Multiselect mit Kästchen, Singleselect in „normalen“ Listboxen.

Nun ist es erforderlich, das einige Listenpunkte, wenn Sie
denn angewählt werden, hinsichtlich eines Kriteriums überprüft
werden.

Sehe ich das richtig, das nur die Daten überprüfen willst,
wenn das Kontrollkaestchen nicht aktiviert ist und ein Klick
auf den Eintrag erfolgt, so das dann die Checkbox makiert
wird?

Ja. :smile:

Das koenntest du wiefolgt realisieren. Sobald in der Liste
geklickt wird, wird das Klick Ereignis ausgelöst.

Private Sub List1_Click()
If List1.Selected(List1.ListIndex) Then
'Ein haeckchen wurde gesetzt
'Auf das Element kannst du nun via
List1.List(list1.listindex) zugreifen
'Dein Source Code
Else
'Es wurde kein Haeckchen gesetzt oder es wurde entfernt!
'Dein Source Code
End If
End Sub

Wenn dieses Kriterium nicht erfüllt ist, muss die
Benutzerauswahl automatisch Rückgängig gemacht werden.

[…]

List1.Selected(List1.ListIndex)=False

[…]

genau hier liegt das Problem!

Also wenn ich dich richtig verstanden habe, dann nicht mehr :smile:

Du hast mich richtig verstanden! :smiley:

[Schnibbel]

Der Benutzer bekommt nach der Rücksetzung natürlich einen
Hinweis, das die Auswahl nicht gültig war und auch warum :wink:

Auch das kannst du mit Leichtihkeit realisieren.

An dieser Stelle hast Du Dir viel zu viel Arbeit gemacht, Alex.
Das P.S. sollte nur zeigen, daß ich nicht vorhabe die (ungültige) Auswahl einfach nur aufzuheben, sondern den User auch darüber zu informieren warum.

Auf das Konstrukt „List1.Selected(List1.ListIndex)“ ganz oben bin ich nicht gekommen ich habe immer mit ähnlichen - aber eben immer falschen - Konstrukten von „List1.Selected(List1.ListIndex)=False“ herumlaboriert.

Ich Danke Dir vielmals!

Liebe Grüße,
Ute

Hallo Alex

Hallo Ute,

Die von Dir beschriebene Listbox (Style =0, Multiselect
0) nutzt ich auch aber IMMER mit Multiselect = 0.
Sieht der Anwender die Kontrollkästchen, so weiß er intuitiv
das eine Mehrfachauswahl möglich ist, was bei den anderen
nicht zwangsläufig der Fall ist.
Daher habe ich für mich beschlossen: Multiselect mit Kästchen,
Singleselect in „normalen“ Listboxen.

Das ist wohl wahr. Ich klang nur so für mich, als wäre das nur eine Notlösung. Deshalb der kurze Hinweis :smile:

An dieser Stelle hast Du Dir viel zu viel Arbeit gemacht,
Alex.

Ach Quatsch, war doch eigentlich nur einmal geschrieben und den Rest konnte man ja groessten Teils kopieren :wink:

Auf das Konstrukt „List1.Selected(List1.ListIndex)“ ganz oben
bin ich nicht gekommen ich habe immer mit ähnlichen - aber
eben immer falschen - Konstrukten von
„List1.Selected(List1.ListIndex)=False“ herumlaboriert.

Naja nun weisst du es ja :smile:

Ich Danke Dir vielmals!

Nichts zu danken

Liebe Grüße,
Ute

LG Alex