![]() |
Auf verschiedene Instanzen eines Formulars zugreifen
Hallo,
zu meinem Problem habe ich irgendwie nirgends etwas gefunden. Ich erstelle mehrer Instanzen eines Formulars mit
Delphi-Quellcode:
Wenn ich jetzt jedoch später auf die Labels/Edit Fenster der Formulare zugreifen möchte, kann ich immer nur die letzte Instanz ansprechen -
Form := TForm.Create(self);
Form.show Kann mir jemand weiterhelfen und mir einen Tipp geben, wie ich das Problem beheben kann? Danke schon mal ;D |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Du bauchst mehrere Variablen, wenn Du die Instanzen gezielt ansprechen willst (oder must diese in einer Liste/Array verwalten):
Delphi-Quellcode:
Form1 := TForm.Create(self);
Form1.show; Form2 := TForm.Create(self); Form2.show; Form3 := TForm.Create(self); Form3.show; |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Oder über die bereits vorhandene Forms-Liste von TScreen darauf zugreifen. Allerdings fände ich eine selbst verwaltete Liste auch eleganter.
|
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Wie gehe ich so eine selbst verwaltete Liste am besten an? Ich weiß nicht genau was ich jetzt in dem Array speichern muss :?:
Zur Zeit speichere ich nur das Handle, aber dann kann ich immer noch nicht z.B. auf die Labels einer Instanz zugreifen... |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Ich würde die Liste einem Array vorziehen. Von der Verwaltung her ist das etwas einfacher.
Belies Dich einfach mal zum Thema TList und TObjectList. Wenn Du das soweit im Griff hast, dann wäre die Beschäftigung mit Generischen Listen sinnvoll (ist nicht so schlimm wie es sich anhört ;-)) |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Da ein Formular ja von TComponent abstammt, böte sich eine
![]() |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Also hab mir das mit den Listen mal angeguckt und habe noch nen paar Fragen. Wo ist der Vorteil einer generischen Liste gegenüber einer TObjectList und was unterscheidet die TObjectList von der TComponentList?
Und wenn ich meine Form speichern möchte, mache ich das dann so richtig? (verwende jetzt TObjectList)
Delphi-Quellcode:
Wenn ich dann schließlich die Liste mit einer Schleife durchgehe, wie kann ich dann wieder auf das Label zugreifen?
Form := TForm.Create(self);
Form.label1.caption := 'test'; List.Add(Form); Danke schonmal ;D |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Zitat:
Ich würde daher sowas machen:
Delphi-Quellcode:
Form := TForm.Create(nil);
Form.label1.caption := 'test'; List.Add(Form); ... List.Free // hier werden auch die Forms freigegeben. Zitat:
Delphi-Quellcode:
for i:=0 to List.count - 1 do
TMyForm(List[i]).label1.Caption := 'Form '+IntToStr(i); |
AW: Auf verschiedene Instanzen eines Formulars zugreifen
Der Hauptunterschied zwischen TObjectList und TComponentList:
Zitat:
|
AW: Auf verschiedene Instanzen eines Formulars zugreifen
... und noch zur generischen Liste:
Da kannst Du angeben, welche Objekte Du in die Liste schreiben willst und die Einträge dann später direkt verwenden. Der Compiler kann dann davon ausgehen, dass nur Formulare in der Liste stehen und verhindert auch, dass etwas anderes (z.B. ein Panel) der Liste hinzugefügt wird. Du kannst somit das "casten" der Einträge vermeiden. Unter uses musst Du dafür Generics.Collections hinzufügen. Für den Anfang würde ich es erst mal klassich machen. Auf Generics umstellen kannst Du dann immer noch.
Delphi-Quellcode:
List: TObjectList<TForm>;
... List := TObjectList<TForm>.Create; ... for i:=0 to List.count - 1 do List[i].label1.Caption := 'Form '+IntToStr(i); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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