![]() |
Zugriffsverletzung beim Öffnen des Fomulars
Hallo,
nachdem ich ein Formular zum zweiten Mal modal anzeigen will, kommt es zu einer Zugriffsverletzung. In dieser Zeile tritt die Zugriffsverletzung auf. Form2.ShowModal; Was muss ich anders machen?
Delphi-Quellcode:
procedure TForm1.btnButton1Click(Sender: TObject);
begin with Form2.Create(nil) do begin try Form2.ShowModal; finally Free; end; end; end;
Delphi-Quellcode:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin release; Form2 := nil; end; |
AW: Zugriffsverletzung beim Öffnen des Fomulars
Zitat:
Entweder du erzeugst dir in deinem Button-Click einmalig ein TForm2, benutzt es und wirfst es danach in den Müll. Beispiel:
Delphi-Quellcode:
Oder du machst mit deinen globalen Variablen weiter, dein Form2: TForm2 existiert für die gesamte Zeit des Programms und du zeigst es einfach nur einmal im Button-Click einmal modal an:
procedure TForm1.btnButton1Click(Sender: TObject);
var meinFormular: TForm2; begin meinFormular := TForm2.Create(nil); try meinFormular.ShowModal(); finally meinFormular.Destroy(); end; end;
Delphi-Quellcode:
procedure TForm1.btnButton1Click(Sender: TObject);
begin Form2.ShowModal(); end; |
AW: Zugriffsverletzung beim Öffnen des Fomulars
Hallo,
Delphi-Quellcode:
und nimm bitte das with weg.
with [B]T[/B]Form2.Create(nil) do
Du hast genau eine globale Variable Form2 und willst das Formular 2 mal öffnen? Lösche diese globale Variable. Das Form2:= nil ist total unnötig. Welches Formular ist denn gemeint, das erste Form2 oder das zweite? Wenn du beide Form2 ansprechen willst, benutze ein Array oder eine Liste, in dem du die beiden erzeugten Forms reinpackst. "global" Liste: TList; var MyForm2: TForm2; begin MyForm2:= TForm2.Create(nil); Liste.Add(MyForm2); und in TForm.Close steht dann etwas wie Liste.Delete(Liste.IndexOf(Self)); Self ist das Formular selbst. |
AW: Zugriffsverletzung beim Öffnen des Fomulars
Delphi-Quellcode:
Im FormClose darf man für modale Formulare kein Release aufrufen oder Action auf caFree setzen.
procedure TForm1.btnButton1Click(Sender: TObject);
begin with TForm2.Create(nil) do begin try ShowModal; finally Free; end; end; end; // oder wenn die Variable Form2 benötigt wird: begin Form2 := TForm2.Create(nil); try Form2.ShowModal; finally Form2.Free; Form2 := nil; end; end; Das löst sporadisch Zugriffsverletzungen aus. Form2 an dieser Stelle auf nil zu setzen macht ebenfalls keinen Sinn. Für die Freigabe modaler Formulare ist der Aufrufer verantwortlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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 by Thomas Breitkreuz