AClone() mit Membervar Array

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19196
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

AClone() mit Membervar Array

Beitrag von Manfred » Mo, 10. Feb 2020 18:11

ich bin jetzt ein wenig verwirrt.
ich habe 2 Membervars. Eins davon ist ein Array, in das ich DataObject einbette. dann wird das Array geclont. Jetzt darf ich doch davon aussgehen, das der Inhalt des geclonten Arrays sich nicht verändert, wenn ich den Inhalt des Ursprungsarrays ändere!?
Tja, irgendwas läuft da wohl schief.

Code: Alles auswählen

DO WHILE ! (::oUnterricht:nArea)->(Eof())
             ::doBrowseUnterricht:datum      := (::oUnterricht:nArea)->datum
             AAdd(::aBrowseUnterricht, ::doBrowseUnterricht:copy())
             (::oUnterricht:nArea)->(DbSkip())
          ENDDO
          ::aBrowseUnterrichtClone := AClone(::aBrowseUnterricht)
          
wenn ich mir ::aBrowseUnterricht[1]:datum anzeigen lasse, dann erscheint 08.02.2020 das gleiche steht auch im geclonten Array drin.
jetzt schreibe ich
::aBrowseUnterricht[1]:datum := CToD("09.02.2020")
und es steht dann auch im geclonten Array so drin.
Ist das so korrekt?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2569
Registriert: Fr, 08. Feb 2008 21:29

Re: AClone() mit Membervar Array

Beitrag von georg » Mo, 10. Feb 2020 19:34

Hallo, Manfred -


wir reden von einfachen und komplexen Datentypen.

Einfache Datentypen lassen sich mittels AClone() so kopieren, dass sie unabhängigen Dateneinheiten darstellen (String, Integer, etc.).

Wenn Du jedoch ein Objekt in einem Array-Element hast, dann wird Du auch in dem geclonten Array auf das gleiche/identische Objekt verwiesen. Änderungen an dem Objekt spiegeln sich dann in beiden Arrays wieder, da auf das gleiche Objekt verwiesen wird.

In diesem speziellen Fall müsstest Du nach dem AClone() das Array durchlaufen und alle vorgefundenen Objekte ebenfalls clonen, dann würde das funktionieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19196
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: AClone() mit Membervar Array

Beitrag von Manfred » Mo, 10. Feb 2020 20:09

das ist Mist. Ich mache das Aclone nur um später die beiden Arrays auf Differenzen zu untersuchen. Eins davon ist in einem browser und dort kann es geändert werden. Ich muß aber wissen ob was geändert wurde, damit ich auf Speichern hinweisen kann, wenn es so weit ist.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 15277
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: AClone() mit Membervar Array

Beitrag von Martin Altmann » Mo, 10. Feb 2020 20:31

Warum so kompliziert?
Wenn das Zellelement zur Bearbeitung aktiviert wird, merkst Du Dir den Inhalt. Wenn das Editieren der Zelle beendet wird (sie also den Fokus verliert), vergleichst Du den gemerkten mit dem aktuellen Inhalt. Ist das unterschiedlich, inkrementierst Du den Zähler mit den Änderungen.
Das gibt jedoch einen Fehlalarm, wenn der Wert in was anderes geändert und dann erneut in das ursprüngliche geändert wird. Wenn Du diesen Fehlalarm verhindern willst, musst Du Dir in dem ursprünglichen Array nur die Inhalte (!) der Zellen merken!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19196
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: AClone() mit Membervar Array

Beitrag von Manfred » Di, 11. Feb 2020 9:21

klappt nicht. Muß ich mal prüfen, warum getfocus und lostfocus nicht richtig greifen.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Antworten