![]() |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Hmm...
Ich weiß nicht aber irgendwie komm ich nicht ganz mit... Das Form ist in der Unit global deklariert wie immer... klar. Ich lade nun das Form und zeige es aus einer anderen Unit heraus an... Beim OnShow macht er terz und nun liegts daran das frm_kind eine globale Variable ist??? Wie soll ich das denn Umgehen? |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Die Frage ist, wieoft hast du das Form schon erzeugt?
Normalerweise ist die globale Variable leer. In eriner normalen App, die mit den Dingern arbeitet würde man das hier machen:
Delphi-Quellcode:
Und auch wenn es nicht sehr schlau ist das zu machen, es funktioniert meistens. Aber nur solange du nur EINE Instanz hast.
formVariable := TFormKlasse.Create(IrgendEinOwner);
Delphi-Quellcode:
Nun gibt es 2 Forms, aber die Referenz auf das zweite steht in dem Ding.
formVariable := TFormKlasse.Create(IrgendEinOwner);
formVariable := TFormKlasse.Create(IrgendEinOwner); Wenn du jetzt (und das verstehe ich irgendwie gar nicht) innerhalb der Methoden dieser Klassen die globalen Varable anstatt self nimmst:
Delphi-Quellcode:
Jetzt wird JEDE Instanz von TFormKlasse IMMER die Methode der Instanz ausführen, die gerade in formVariable steht.
procedure TFormKlasse.OnShow(....);
begin formVariable.DoSomething(); end; Das hier hätte gereicht:
Delphi-Quellcode:
procedure TFormKlasse.OnShow(....);
begin DoSomething(); // oder self.DoSomething(); end; |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Hmm... verstanden...
Ich erzeuge das Form aber nur einmal. |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
na dann rücke mal den evtl. überschriebenen constructor, OnCreate und OnShow raus. ;)
Interessant ist auch das: Verwendung der globalen Variable im OnShow Handler:
Delphi-Quellcode:
Form wird erzeugt, aber die referenz kommt in nicht in die globale Variable:
procedure TFormKlasse.OnShow(....);
begin formVariable.DoSomething(); end;
Delphi-Quellcode:
Natürlich muss es nun im OnShow knallen...
procedure TMdiParent.DoSomething;
var formVariable :TFormKlasse; begin formVariable := TFormKlasse.Create(self); formVariable.Show();// boom end; |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Großes tut mir leid!!! :oops: :oops: :oops:
Ich habe alles nur aus dem Kopf aufgeschrieben und habe nun beim nachsehen und ausprobieren den Fehler gefunden... Ich rufe im OnShow nur eine Function des Forms auf und in dieser kommt dann der Fehler. Dumm wie ich nunmal bin hab ich die Function genau wie beschrieben aufgerufen. Zitat:
|
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Zitat:
Zitat:
BTW: Du brauchst hier auch wirklich keine globale Variable. Wenn du nur Children von einem Typ hast gates so:
Delphi-Quellcode:
private
function getMyActiveChild: ChildKlasse; public property MyActiveChild: ChildKlasseread getMyActiveChild;
Delphi-Quellcode:
Beim nächsten Mal aber bitte soweit im Debugger laufen bis du Zeile kennst, die knallt. (BreakPoints & F8 sind etwas unentbehrliches ;) )
function ParentKlasse.getMyActiveChild: ChildKlasse;
begin if assigned(ActiveMdiChild) and (ActiveMdiChild is ChildKlasse) then result := ChildKlasse(ActiveMdiChild) else result := nil; end; |
Re: MDI-Child - Zugriffsverletzung bei Zuweisung
Ich hatte ja debuggt nur hab ich leider den Beitrag zwischen Tür und Angel geschrieben und nicht mehr nachgedacht und kontroliiert ob ich das wirklich so gemacht hab... Und da is mir dieser kleine Umstand leider entfallen...
Nochmal Sorry und Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz