Code: Alles auswählen
Sub details_checkValues(oEvent as Object)
Dim dSoll as Currency
Dim dHaben as Currency
dim oField as Object
oForm = thisComponent.drawpage.forms.frmDetails
rem bestimme das aktuelle Feld und die derzeitigen Werte
oField = oEvent.Source.Model ' Name = "fsoll" oder "fhaben"
icur = oForm.getRow
dcurSoll = oForm.getDouble(4)
dcurHaben = oForm.getDouble(5)
msgBox( "Feld " + icur + " " + oField.Name + chr(13) + "S " + dcurSoll + " - H " + dcurHaben)
End Sub
Folgende Verfahren halte ich für ungeeignet: "Text modifiziert" wegen der ständigen Prüfung bei jedem einzelnen Wert; Drücken oder Loslassen von Maus/Taste wegen der vielen Varianten, wie eine Eingabe in einer Zelle abgeschlossen wird; "Vor Datensatzwechsel" wegen der sofortigen Prüfung von Spalte 3 (fsoll). Ich habe auch versucht, bei Spalte 3 "Fokusverlust" und außerdem "Vor Datensatzwechsel" zu verbinden; aber dann muss ich wegen oEvent.Source beide Routinen trennen und diverse Nebenwirkungen beachten (zumindest wird beim Datensatzwechsel die Prüfung oft auch vorgenommen, wenn nichts geändert wurde).
Hintergrund: Es handelt sich um eine Mini-Buchhaltung. Die Summen von Soll und Haben müssen übereinstimmen; in jeder Zeile gibt es nur entweder Soll oder Haben. Nach Eingabe eines Wertes werden diese Prüfungen vorgenommen. Je nach Prüfungsergebnis wird ein Wert in der aktuellen Zeile auf 0 gesetzt, dazu die Werte in der letzten Zeile geändert oder eine weitere Zeile hinzugefügt.
Danke für Tipps! Jürgen
Nachtrag: Kann und sollte ich ein eigenes Ereignis (Zelle modifiziert oder so) erzeugen? Damit habe ich mich nicht befasst. Ich habe auch nicht verstanden, ob mir die Diskussion Listener für ein Tabellen Kontrollfeld (GridControl) helfen könnte.