![]() |
Erzeugte Form
Ich habe eine Form = fsNormal (Haupt Form). Auf dieser Form ist ein Button. Wenn ich den Button klicke, wird eine mit Application.CreateForm(TForm2, Form2); eine zweite Form aufgerufen. Wenn ich nochmals auf den Button klicke eine Weitere usw. aufgerufen. Auf den aufgerufenen Formen ist ein TEdit. Das klappt auch alles ganz gut nur wir komme ich an TEdit von den aufgerufenen Formen heran? Mit Form2.Edit.Text komme ich nur an der ersten Form herann. Hat Einer von Euch einen Vorschlag?
|
Re: Erzeugte Form
Zitat:
|
Re: Erzeugte Form
Hi,
wie sieht denn dein Code aus??? |
Re: Erzeugte Form
Hier ist mein Code:
Code:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Application.CreateForm(TForm2, Form2); end; end.
Code:
Matürlich könnte ich auf der Form2 das TEdit dynamisch erzeugen, aber auf dieser Form sollen noch weiter Elemente platziert werden, so dass es zu umständlich wäre alle Elemente dyn. zu erzeugen.
unit Unit2;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.DFM} procedure TForm2.FormCreate(Sender: TObject); begin end; procedure TForm2.Edit1Change(Sender: TObject); begin end; end. |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "VCL-Komponenten und Controls" verschoben.
Kein Windows API Problem |
Re: Erzeugte Form
du musst die instanzen von TForm2 dir irgendwo absichern bevor du die nächste erzeugst sonst ist klar das du nicht mehr über form2 ran kommst da du die variable form2 mit einer neuen Instanz von TForm2 überschreibst.
Erstelle die neuen Instanzen am besten so
Delphi-Quellcode:
anschließend kannst du über form2.Edit1 auf das edit der zuletzt erzeugten Instanz zugreifen.
form2 := TForm2.Create(Application);
Wenn du auf alle instanzen zugreifen willst nimm einfach eine TList dafür
Delphi-Quellcode:
damit wird jedes mal wenn eine Instanz erstellt wird diese in die Liste gepackt.
form2Liste: TList;
[...] form2Liste := TList.Create; [...] form2Liste.Add(TForm2.Create(Application)); später kannst du dann mit
Delphi-Quellcode:
auf die Edits der verschiedenen Instanzen zugreifen.
TForm2(form2Liste.Items[Index]).Edit1
|
Re: Erzeugte Form
Frohes neues Jahr!
Vielen Dank für Deine Antwort! Ich habe es getestet, aber wenn ich so abfrage
Code:
kann ich wieder nur auf die zuletzt erzeugte Form zurÜckgreifen. Nicht auf alle Formen. Ich bin aber noch Delphi- Anfänger und bitte um Entschuldigung wenn ich etwas nicht sofort verstehen!
TForm2(Form2.Liste.Items[Index]).Edit1.Text := 'Test';
Und wenn ich so Abfrage
Code:
Dann bekomme ich die Fehlermeldung: Liste überschreitet das Maximum (1).
TForm2(Form2.Liste.Items[0]).Edit1.Text := 'Test'; // für die erste Form
TForm2(Form2.Liste.Items[1]).Edit1.Text := 'Test'; // für die zeite Form |
Re: Erzeugte Form
Ich habe es doch hinbekommen. Hatte sich ein Schreibfehler eingeschlichen! Aber wenn ich die Formen so öffne, kann ich zwar auf alle Formen zugreifen, aber wenn ich die Formen schliesse und dann wieder aufrufe stürzt Delphi ab.
|
Re: Erzeugte Form
dann einfach im onClose/onDestroy der Form aus der Liste austragen
Delphi-Quellcode:
Form2Liste.Delete(Form2Liste.IndexOf(Self));
|
Re: Erzeugte Form
Ja, vielen Dank für die Antwort, Daruf bin ich auch schon gekommen. Ich komme jetzt Dank Deine Hilfe klar und habe wieder etwas dazu gelernt. Nochmals Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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