![]() |
Problem mit verschiedenen Forms
Habe jetzt schon lange in den Themen gesucht, aber noch nicht das richtige gefunden.
Meine Anwendung besteht aus Form1, Form2, Form3. In Form1 Button1Click startet Form2 und Button2Click startet Form3. Form3 := TForm3.Create( Self ); Form3.Show; äquivalent Form4 := TForm3.Create( Self ); Form4.Show; Form3 und Form4 sollen gleichzeitig sichtbar sein. Wird in Form1 ein anderes Member ausgewählt, so möchte ich erreichen, daß Form3 und/oder Form4 falls geöffnet, geschlossen werden. Bei Form3.Close bzw. Form4.Close erhalte ich 'AccessViolation'. Ausserdem werden bei Button1Click bzw. Button2Click immer neue Fenster göffnet. Beim Form3.ShowModal bzw. Form4.ShowModal läßt sich immer nur eines der beiden Fenster öffnen. Ich hoffe ich habe mich für einen Anfänger klug genug ausgedrückt. Für schnelle Hilfe bedanke ich mich jetzt schon. |
AW: Problem mit verschiedenen Forms
Ich bin ja kein großer Freund davon, Fenster selber zu erzeugen.
Die IDE ist eine relativ gute IDE, wo man vieles nicht mehr von Hand machen muss. Lasse deine Fensterinstanzen doch alle beim Programmstart automatisiert erzeugen, und vergiss das TFormX.Create(). Dann brauchst du nur noch .Show und .Close und es gibt keine Zugriffgsverletzungen mehr. Zitat:
|
AW: Problem mit verschiedenen Forms
Hallo DomPerle,
zeig doch mal deinen bisherigen Quelltext, dann fällt es eventuell leichter das Problem ausfindig zu machen. |
AW: Problem mit verschiedenen Forms
Zitat:
Für mich ist das schlimmste, wenn alle Fenster beim Programmstart erzeugt werden. Ein Projekt von mir hat ca. verschiedene 300 Forms. Wie lange soll das denn starten?:shock: Bei nicht modalen Fenstern ist es auch mal erlaubt mehrere Instanzen der Form zu öffnen. Dann kommst du ohnehin nicht um ein TForm.Create herum. |
AW: Problem mit verschiedenen Forms
Zitat:
ich beispielsweise habe 29 und die werden innerhalb 250 Millisekunden geladen. Bis die vom Nutzer eingestellte Sprache übernommen und allen Einstellungen geladen wurden, noch einmal 110 Millísekunden. Ist jetzt kein Weltuntergang in meinem Fall. ich gelobe Besserung, versprochen, indem ich meinen schändlichen Code... verbessere :P |
AW: Problem mit verschiedenen Forms
Auch Modale Forms kann man mehrmals erzeugen.
Nimm z.B. eine TForm1, da drauf ein Button und darin dann
Delphi-Quellcode:
Aber gerade dann, wenn Forms mehrfach erzeugt werden, darf man die globalen Form-Variablen vom Delphi nicht mehr benutzen.
F := TForm1.Create(Self);
F.ShowModal; Und bei Freigabe der Forms werden diese globalen Variablen nicht automatisch auf NIL gesetzt. Ein Publisched-Field im Owner der neuen Form würde automatisch NIL, wenn es genau so heißt, wie die neue Form (aber in diesem Owner darf/kann es dann auch nur je eine einzige Instanz geben) |
AW: Problem mit verschiedenen Forms
Hallo,
das ja zwei Fragen. Zitat:
Delphi-Quellcode:
Form3 := TForm3.Create( Self );
Form3.Show;
Delphi-Quellcode:
if Form3=nil then
begin Form3 := TForm3.Create( Self ); end; Form3.Show; Zitat:
Nimm besser FreeAndNil(Form3); Die Frage wäre hier auch noch, wer schließt Form3 und Form 4, in meinem Fall hier ist es das Hauptformular (Form1). Sollte Form3 sich selber schließen wollen, rufst du Close in Form3 auf (Form3.Close wäre das gleiche, muss aber nicht, macht man auch nicht). Dann musst du dem Hauptform irgendwie beibringen, das die globale Variable Form3 auf nil gesetzt werden muss. |
AW: Problem mit verschiedenen Forms
Zitat:
Also im Prinzip eine einfache Unit die alles macht, tut, weiß und super-schlau ist. Vielleicht hilft sowas ja. |
AW: Problem mit verschiedenen Forms
Hallo,
das wäre eine gute Entkopplung von Hauptformular. |
Dieses Thema wurde am "17. Apr 2018, 20:48 Uhr" von "Daniel" aus dem Forum "Fragen / Anregungen zur DP" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 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