AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MDI-Child - Zugriffsverletzung bei Zuweisung

Ein Thema von Mr_G · begonnen am 10. Jul 2005 · letzter Beitrag vom 10. Jul 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#11

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 20:52
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?
Jan
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#12

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:07
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:
formVariable := TFormKlasse.Create(IrgendEinOwner); Und auch wenn es nicht sehr schlau ist das zu machen, es funktioniert meistens. Aber nur solange du nur EINE Instanz hast.

Delphi-Quellcode:
formVariable := TFormKlasse.Create(IrgendEinOwner);
formVariable := TFormKlasse.Create(IrgendEinOwner);
Nun gibt es 2 Forms, aber die Referenz auf das zweite steht in dem Ding.
Wenn du jetzt (und das verstehe ich irgendwie gar nicht) innerhalb der Methoden dieser Klassen die globalen Varable anstatt self nimmst:
Delphi-Quellcode:
procedure TFormKlasse.OnShow(....);
begin
  formVariable.DoSomething();
end;
Jetzt wird JEDE Instanz von TFormKlasse IMMER die Methode der Instanz ausführen, die gerade in formVariable steht.
Das hier hätte gereicht:
Delphi-Quellcode:
procedure TFormKlasse.OnShow(....);
begin
  DoSomething();
  // oder
  self.DoSomething();
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#13

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:15
Hmm... verstanden...
Ich erzeuge das Form aber nur einmal.
Jan
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#14

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:26
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:
procedure TFormKlasse.OnShow(....);
begin
  formVariable.DoSomething();
end;
Form wird erzeugt, aber die referenz kommt in nicht in die globale Variable:
Delphi-Quellcode:
procedure TMdiParent.DoSomething;
var
  formVariable :TFormKlasse;
begin
  formVariable := TFormKlasse.Create(self);
  formVariable.Show();// boom
end;
Natürlich muss es nun im OnShow knallen...
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#15

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:36
Großes tut mir leid!!!
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:
Delphi-Quellcode:
procedure TFormKlasse.OnShow(....);
begin
  formVariable.DoSomething();
end;
Großes Entschuldigung und riesiges Danke für die Geduld!!!
Jan
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#16

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:50
Zitat von Mr_G:
Dumm wie ich nunmal bin hab ich die Function genau wie beschrieben aufgerufen.
Macht ja nix. Aus Fehlern lernt man doch immer noch am besten.
Zitat von Mr_G:
Großes Entschuldigung und riesiges Danke für die Geduld!!!
Manchmal bin sogar ich ein wenig geduldig.
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:
function ParentKlasse.getMyActiveChild: ChildKlasse;
begin
  if assigned(ActiveMdiChild) and (ActiveMdiChild is ChildKlasse) then
    result := ChildKlasse(ActiveMdiChild)
  else
    result := nil;
end;
Beim nächsten Mal aber bitte soweit im Debugger laufen bis du Zeile kennst, die knallt. (BreakPoints & F8 sind etwas unentbehrliches )
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#17

Re: MDI-Child - Zugriffsverletzung bei Zuweisung

  Alt 10. Jul 2005, 21:55
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!
Jan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz