Ich arbeite viel mit Ownerdrawing. In Browses verwende ich abgeleitete Klassen, die u.a. die Methode CustomDrawCell() enthalten, aber auch einiges mehr. Die in den Methoden verwendeten Funktionalitäten sind vielfach abgesichert und tausendfach auf Herz und Nieren geprüft. Ich weiß inzwischen, was man darf und was nicht (z.B. auf Tabellen zugreifen oder im Ausgabekontext außerhalb des Presentation Spaces herumfrickeln), und ich gehe eigentlich davon aus, all das auch zu beherzigen. Dies umso mehr, da die Fehlersituation, mit der ich zuweilen zu tun habe, nur sehr selten auftreten, aber sie tun es. Leider.
Es geht um einen IDSC (Interne Datenstrukturen beschädigt), der im Kontext von XbpBrowse:ForceStable auftritt, und zwar dort im :SetCell() der DataArea. Die Argumente im Fehlerfall sind "XbpCellGroup" (die DataArea), ein numerischer Wert (die Ordinalposition der Zeile der DataArea) und überraschenderweise ein NIL, wo eigentlich der Wert enthalten sein sollte, der der Zelle per DataLink zugewiesen wurde. In meinen CustomDrawCell-Methoden und auch in den anderen überlagerten Methoden gibt es kein SetCell (aber einige GetCells, die allesamt funktionieren).
Nun dachte ich, ich bin ein ganz schlauer und überlagere einfach das ForceStable() mit einer eigenen Methode, wo ich dann den Aufruf des eigentlichen ForceStable in eine Sequenz einbette - in der Hoffnung, dass das Browse trotzdem angezeigt wird und irgendwo eine blanke Zelle zu sehen ist:
Code: Alles auswählen
METHOD MyBrowse:ForceStable()
LOCAL bSaveError := ErrorBlock({|e|Break(e)})
IF ::status() == XBP_STAT_CREATE
BEGIN SEQUENCE
::XbpBrowse:ForceStable()
END SEQUENCE
ENDIF
ErrorBlock(bSaveError)
RETURN self
Kennt jemand diese Situation? Ich meine, sie muss nicht unbedingt mit Ownerdrawing zu tun haben. Es könnte sich auch um ein generelles (Timing?)Problem in XbpBrowse handeln.
1.9 SL1.