![]() |
TForm.Name bekommt fortlaufende Nr angehängt
Hallo zusammen,
ich habe mit einem Formulat das Phänomen, dass dieses bei jedem Aufruf zu seinem Namen eine Nr. angehängt bekommt. Ich erzeuge und öffne das Fenster ganz normal über
Delphi-Quellcode:
Wenn ich mir Form1.Name anzeigen lasse, heißt es mit dem ersten Aufruf Form1, mit dem zweiten Aufruf Form1_1, Form1_2, ...
Form1 := TForm1.Create(nil):
try Form1.Showmodal; finally Form1.Free; Form1:=nil; end; Das stelle ich bei keinem anderen Formular fest. Ich speichere beim Schließen die Position unter Form.Name und das nutzt natürlich wenig, wenn das Form beim nächsten Aufruf einen anderen Namen hat. Weiß jemand woher das kommt? Problem tritt mit Delphi XE auf Danke Gerd |
AW: TForm.Name bekommt fortlaufende Nr angehängt
hallo,
das liegt daran, das Tform1 automatisch erzeugt wird. Project/Optionen/Anwendung/Formulare so funkioniert es
Delphi-Quellcode:
var
frm: TForm1; begin try frm := Tform1.Create(nil); frm.ShowModal; finally frm.Free; end; end; |
AW: TForm.Name bekommt fortlaufende Nr angehängt
Dann vergib doch dem Formular einen Namen. Das sollte dann doch reichen.
|
AW: TForm.Name bekommt fortlaufende Nr angehängt
Nein, automatisch wird es sicher nicht erzeugt. Aber trotzdem: Mit der lokalen Variablen habe ich ein Workaround das funktioniert.
Verstehen tu ich es trotzdem nicht, denn ich verwende in der Regel immer die bei TForm automatisch erstellte globale Variable Form1 und habe das noch nie festgestellt. Sonst würde die Wieder-Positionierung öfters nicht funktionieren. Dadurch dass ich Form.ShowModal aufrufe und danach Free und = NIL setze, sollte es auch nicht als Folge Instanz gedeutet werden. Danke Gerd |
AW: TForm.Name bekommt fortlaufende Nr angehängt
Hast du Application.CreateForm() aus dem Projekt-Quelltext entfernt? Das kann man auf bei dem von mmw geposteten Menüpfad einstellen, funktioniert bei komplexeren Projekten mit Startparametern aber eher schlecht als recht.
Zitat:
|
AW: TForm.Name bekommt fortlaufende Nr angehängt
Ja klar, der ist ja auch syntaktisch total falsch.
Variable im Finally nicht initiailisiert, ist noch das gerinngste Problem. Das Create gehört vor das TRY, denn wenn es da knallt, dann darf auf keinen Fall das Free ausgeführt werden, weil (A) die Variable nicht initialisiert ist und (B) das Objekt bereits im Create freigegeben wurde, da der Zeiger des Result der Variable ganricht zugewiesen werden konnte, weil es knallte. Formularnamen sind global eindeutig, und wenn sowas bereits existiert, dann wird nunmal der Name so geändert, dass es passt. |
AW: TForm.Name bekommt fortlaufende Nr angehängt
Zitat:
Ich habe auch probiert
Delphi-Quellcode:
Damit bin ich sicher, dass Form correct genillt wurde und damit sollte ja auch der Name frei sein
if not assigned(Form1) then
Form1 := TForm1.Create(nil); try Form1.Showmodal; finally Form1.Free; Form1:=nil; end; |
AW: TForm.Name bekommt fortlaufende Nr angehängt
Dann machst du wohl was falsch?
* entweder der Name steht so in der DFM * oder es gibt bereits ein globales Objekt mit diesem Namen (z.B. TForm, TDataModule oder TService) siehe TReader.ReadRootComponent->FindUniqueName in System.Classes |
AW: TForm.Name bekommt fortlaufende Nr angehängt
Ja, und ich habe den Fehler auch gefunden. Im OnClose des Formulars stand
Delphi-Quellcode:
Form1 := nil
|
AW: TForm.Name bekommt fortlaufende Nr angehängt
In dem Fall kann ich nur das sagen, das ich hier immer sage:
Schmeiß diese globale Variable weg. Auch bau automatisch erzeigten Formularen kann man diese Variable entfernen und in die DPR verschieben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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