Wie Doppelclick in Listbox feststellen
Verfasst: Mo, 25.02.2013 09:22
Hallo liebe Leute
Ich habe innerhalb eines Base-Formulares eine einfache Listbox. Bei Single-Click wird ein Element markiert, bei Doppel-Click wird das Element ausgewählt. Und speziell beim Doppel-Click soll aber jetzt eine Folge-Verarbeitung stattfinden. Bei Doppelclick wird in der Listbox des ausgewählten Satzes ein bestimmter Wert gelesen und auf den aktuellen Satz eines Tabellen-Controls geschrieben, das direkt neben der Listbox steht. Man kann sich das einfach vorstellen, die Listbox links ist ein Kostenstellen-Plan, die Tabelle rechts davon sind Buchungssätze, die eben eine Kostenstelle erhalten sollen. Nachdem der Buchungssatz aktualisiert wurde, skipt der Satzzeiger automatisch +1 und man kann die nächste passende Kostenstelle in der Listbox suchen.
Also, vorab.... das funktioniert erst mal alles schon. Nur ich habe ein kleines Problem mit der Listbox. Wenn ich nach dem ersten Doppelclick in der Listbox einmal mit Click in der Buchungstabelle den Satzzeiger manuell verändere, spinnt danach die Listbox. Das heisst, die fängt dann allein durch Mausbewegung an zu scrollen... irgendwie unkontrolliert und merkwürdig. Ich vermute, es liegt an meinen beiden Ereignissen.
Ich habe in der Listbox zwei Ereignisse deklariert. Einmal will ich auf Enter reagieren und einmal auf Doppelclick. Allerdings weiss ich nicht, ob das wirklich der richtige Weg ist.... deshalb bitte ich um Eure Hilfe. Das Tabellencontrol für die Buchungssätze selber enthält keine definierten Ereignisse, hier nutze ich für Navigation bzw. Änderungen einfach den OO-Standard. Also von der Seite gibts da keine Interessenkonflikte oder Ereignis-Kollisionen.
Ereignis "Taste gedrückt": Standard.UpdateUmsatzSetFehlendeKArt.OnKeyPress (document, Basic)
Ereignis "Maustaste gedrückt": Standard.UpdateUmsatzSetFehlendeKArt.OnDoppelClick (document, Basic)
Und das passiert im Programm:
'=======================================================================================================================
Sub OnKeyPress(oEvt)
If (oEvt.KeyCode = com.sun.star.awt.Key.RETURN) Then
GetRecIDFromListbox(EH_KEYPRESS)
EndIf
End Sub
'=======================================================================================================================
Sub OnDoppelClick(oEvt)
if (oEvt.ClickCount = 2) then
GetRecIDFromListbox(EH_DBLCLICK)
endif
End Sub
'=======================================================================================================================
Gibt es vielleicht eine bessere Lösung?
Danke für Eure Hilfe
vg, Maddin
Ich habe innerhalb eines Base-Formulares eine einfache Listbox. Bei Single-Click wird ein Element markiert, bei Doppel-Click wird das Element ausgewählt. Und speziell beim Doppel-Click soll aber jetzt eine Folge-Verarbeitung stattfinden. Bei Doppelclick wird in der Listbox des ausgewählten Satzes ein bestimmter Wert gelesen und auf den aktuellen Satz eines Tabellen-Controls geschrieben, das direkt neben der Listbox steht. Man kann sich das einfach vorstellen, die Listbox links ist ein Kostenstellen-Plan, die Tabelle rechts davon sind Buchungssätze, die eben eine Kostenstelle erhalten sollen. Nachdem der Buchungssatz aktualisiert wurde, skipt der Satzzeiger automatisch +1 und man kann die nächste passende Kostenstelle in der Listbox suchen.
Also, vorab.... das funktioniert erst mal alles schon. Nur ich habe ein kleines Problem mit der Listbox. Wenn ich nach dem ersten Doppelclick in der Listbox einmal mit Click in der Buchungstabelle den Satzzeiger manuell verändere, spinnt danach die Listbox. Das heisst, die fängt dann allein durch Mausbewegung an zu scrollen... irgendwie unkontrolliert und merkwürdig. Ich vermute, es liegt an meinen beiden Ereignissen.
Ich habe in der Listbox zwei Ereignisse deklariert. Einmal will ich auf Enter reagieren und einmal auf Doppelclick. Allerdings weiss ich nicht, ob das wirklich der richtige Weg ist.... deshalb bitte ich um Eure Hilfe. Das Tabellencontrol für die Buchungssätze selber enthält keine definierten Ereignisse, hier nutze ich für Navigation bzw. Änderungen einfach den OO-Standard. Also von der Seite gibts da keine Interessenkonflikte oder Ereignis-Kollisionen.
Ereignis "Taste gedrückt": Standard.UpdateUmsatzSetFehlendeKArt.OnKeyPress (document, Basic)
Ereignis "Maustaste gedrückt": Standard.UpdateUmsatzSetFehlendeKArt.OnDoppelClick (document, Basic)
Und das passiert im Programm:
'=======================================================================================================================
Sub OnKeyPress(oEvt)
If (oEvt.KeyCode = com.sun.star.awt.Key.RETURN) Then
GetRecIDFromListbox(EH_KEYPRESS)
EndIf
End Sub
'=======================================================================================================================
Sub OnDoppelClick(oEvt)
if (oEvt.ClickCount = 2) then
GetRecIDFromListbox(EH_DBLCLICK)
endif
End Sub
'=======================================================================================================================
Gibt es vielleicht eine bessere Lösung?
Danke für Eure Hilfe
vg, Maddin