![]() |
AW: 2. Form schliessen Variable=Nil
Ich weiß ja nicht mit welchem Delphi du programmierst, aber wenn ich einfach mal ein Formular neu erstelle, dann habe ich da folgenden Code
Delphi-Quellcode:
und nun rat mal, was die Variable "Form2" ist ... ein globale ;)
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} end. Und um von einer anderen Form diese steuern zu können muss ich ja idR dort die Unit einbinden:
Delphi-Quellcode:
und somit kennt die Unit1 auch die Variable "Form2"
unit Unit1;
interface ... implementation uses Unit2; ... end. |
AW: 2. Form schliessen Variable=Nil
Hallo,
für nichtmodale Forms müssen meiner Meinung eine globale Variabel erzeugt werden, wie soll das sonst funktionieren? Bis bald Chemiker |
AW: 2. Form schliessen Variable=Nil
@Sir Rufo,
die 2. Form soll dynamisch erzeugt werden und steht in den Optionen nicht unter automatisch erzeugen. Ist es dann wirklich so, dass dann die Variable Form2 in der unit1 direkt ansprechbar ist und wenn sie nil ist dass dann in unit1 übergibt? Was ist mit mehreren Instanzen von der Form2, wenn diese auch aus anderen Units genutzt wird? @Chemiker habe das ja auch schon gelöst, siehe ![]() |
AW: 2. Form schliessen Variable=Nil
Das hat ja nichts damit zu tun, ob es sich um ein Formular handelt oder nicht. Globale Variablen im interface-Abschnitt sind generell von überall erreichbar, sofern die enthaltende Unit eingebunden wird. Willst Du mehrere Instanzen erzeugen, solltest Du Dir diese unbedingt in einer Liste (TObjectList, Array etc.) merken, da die eine Variable ja sonst mit jeder weiteren Instanz überschrieben und die alte Instanz somit unerreichbar wird.
|
AW: 2. Form schliessen Variable=Nil
Zitat:
|
AW: 2. Form schliessen Variable=Nil
Dann nimm doch einfach verschiedene Variablen vom Typ TForm2.
|
AW: 2. Form schliessen Variable=Nil
Zitat:
(Zudem die automatische Erstellung des Formulars genau diese Variable benötigt -> s.u. ) Es reicht ja, wenn alle, die darauf zugreifen wollen den Zugriff haben und wenn diese Zugriffe nur innerhalb einer Unit passieren, dann würde ich keine globale Variable benötigen. Zitat:
Wenn du mehrere Instanzen benötigst, dann musst du dich um die Verwaltung dieser selber kümmern. Und ja, wird die Instanz von TForm2 nicht automatisch beim Start erzeugt, dann ist Form2 NIL.
Delphi-Quellcode:
program Test;
uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); // <- da passiert die Zuweisung Application.CreateForm(TForm2, Form2); // <- und da auch Application.Run; end. |
AW: 2. Form schliessen Variable=Nil
eben und sie soll ja nicht automatisch erzeugt werden, sondern dynamisch im Bedarfsfall!
Spricht denn etwas gegen die Lösung in Post 6? Ja ich bekenne mich schuldig, ich hätte die Variablennamen anders benennen sollen! |
AW: 2. Form schliessen Variable=Nil
Wenn von dem Formular tatsächlich immer nur eine Instanz zur gleichen Zeit angezeigt werden soll macht der Vorschlag in Beitrag #19 für mich am ehesten Sinn. Das sieht mir wie eine abgewandelte Form des Singleton-Patterns aus.
|
AW: 2. Form schliessen Variable=Nil
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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