Leider doch nicht gelöst. Wenn ich mit der Maus von einer Zelle zur anderen wandere, wird oCtrl.hasFocus als FALSE angesehen. Wenn ich bedenke, wie die Komponenten bei OO strukturiert sind, ist das auch erklärlich: Es ist nun mal eine einzelne Zelle aktiv; also muss oCtrl.hasFocus (bezogen auf das Grid) als false angesehen werden. Vermutlich muss ich die Abfrage, ob der Datensatzwechsel durch Benutzereingabe im Grid oder "von außen" über das Formular erfolgt, über irgendeinen Service steuern.
Ich verwende vorerst eine Notlösung mit einer (innerhalb des Moduls) globalen Variablen:
Code: Alles auswählen
Dim detailsGrid_hasFocus as Boolean
rem das Ereignis "Fokuserhalt" beim Grid
Sub details_grid_focusOn(oEvent as Object)
detailsGrid_hasFocus = true
End Sub
rem das Ereignis "Fokusverlust" beim Grid
Sub details_grid_focusOff(oEvent as Object)
detailsGrid_hasFocus = false
End Sub
rem die Prüfung beim Ereignis "Nach dem Datensatzwechsel"
Sub details_changeDataRow(oEvent as Object)
if not detailsGrid_hasFocus then
exit Sub
end if
rem usw. die Prüfungen während der Benutzereingaben
Für eine bessere Lösung (ohne globale Variable, am besten nur innerhalb des EventHandlers details_changeDataRow) bin ich weiterhin offen. Jürgen
Nachtrag (07.11.2012 um 8.50 Uhr): Die Notlösung genügt noch nicht. Damit wird das Ereignis "Fokusverlust" beim Grid auch dann ausgelöst, wenn eine bestimmte Zelle innerhalb des Grids aktiviert wird. Ich habe jetzt für jede einzelne Spalte beim Ereignis "Fokuserhalt" die Routine details_grid_focusOn festgelegt. Das scheint endlich zu klappen.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC