AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Auf verschiedene Instanzen eines Formulars zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Auf verschiedene Instanzen eines Formulars zugreifen

Ein Thema von Pandax3 · begonnen am 9. Jun 2013 · letzter Beitrag vom 11. Jun 2013
Antwort Antwort
Seite 1 von 2  1 2      
Pandax3

Registriert seit: 16. Jul 2011
22 Beiträge
 
#1

Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 9. Jun 2013, 19:53
Hallo,
zu meinem Problem habe ich irgendwie nirgends etwas gefunden. Ich erstelle mehrer Instanzen eines Formulars mit
Delphi-Quellcode:
Form := TForm.Create(self);
Form.show
Wenn ich jetzt jedoch später auf die Labels/Edit Fenster der Formulare zugreifen möchte, kann ich immer nur die letzte Instanz ansprechen -
Kann mir jemand weiterhelfen und mir einen Tipp geben, wie ich das Problem beheben kann?

Danke schon mal ;D
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 9. Jun 2013, 19:59
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;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 9. Jun 2013, 21:01
Oder über die bereits vorhandene Forms-Liste von TScreen darauf zugreifen. Allerdings fände ich eine selbst verwaltete Liste auch eleganter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Pandax3

Registriert seit: 16. Jul 2011
22 Beiträge
 
#4

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 9. Jun 2013, 21:10
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...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 9. Jun 2013, 21:18
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 )
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 10. Jun 2013, 07:09
Da ein Formular ja von TComponent abstammt, böte sich eine TComponentList an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (10. Jun 2013 um 12:27 Uhr) Grund: Link korrigiert
  Mit Zitat antworten Zitat
Pandax3

Registriert seit: 16. Jul 2011
22 Beiträge
 
#7

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 10. Jun 2013, 11:35
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:
Form := TForm.Create(self);
Form.label1.caption := 'test';
List.Add(Form);
Wenn ich dann schließlich die Liste mit einer Schleife durchgehe, wie kann ich dann wieder auf das Label zugreifen?

Danke schonmal ;D
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#8

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 10. Jun 2013, 11:50
Und wenn ich meine Form speichern möchte, mache ich das dann so richtig?
(verwende jetzt TObjectList)
Im Prinzip ja. Du musst nur aufpassen, wann und von wem die Form wieder freigegeben wird. Die ObjectList gibt die enthaltenen Objekte standardmäßg selbst wieder frei (schau mal bei OwnsObjects). Wenn du in deinem TForm.Create noch ein self als Owner angibst, versucht dieser Owner evtl. die Form freizugeben, wenn sie bereits durch die ObjectList freigegeben wurde.

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.
Wenn ich dann schließlich die Liste mit einer Schleife durchgehe, wie kann ich dann wieder auf das Label zugreifen?
Delphi-Quellcode:
for i:=0 to List.count - 1 do
  TMyForm(List[i]).label1.Caption := 'Form '+IntToStr(i);

Geändert von bcvs (10. Jun 2013 um 11:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 10. Jun 2013, 12:29
Der Hauptunterschied zwischen TObjectList und TComponentList:
Zitat:
Das TComponentList-Objekt aktualisiert sich automatisch selbst, wenn eine Komponente freigegeben wird. Dazu wird der Verweis auf die betreffende Komponente gelöscht und die Liste gepackt.
P.S.: Der Link oben war defekt, ich habe ihn korrigiert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Auf verschiedene Instanzen eines Formulars zugreifen

  Alt 10. Jun 2013, 12:38
... 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);
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz