![]() |
Delphi-Version: 7
Objectliste an modales Fenster übergeben und zurück
Hallo,
ich brauche bitte einen Denk-Anstoß. Ich möchte auf meiner Main-Form ein Modales Fenster aufrufen und diesem eine Objectliste übergeben. Diese wird im modalen Fenster geändert und soll nach dem schließen des modalen Fensters in der Main-Form weiter verarbeitet. Kann ich mir in der modalen Form eine "Function Execute(aObjektliste:TKlasse):TKlasse;" erstellen?
Code:
//Childform
var tempObjektlist:TKlasse; function frmChild.Execute(aObjektliste:TKlasse):TKlasse; begin try tempObjektliste:=TKlasse.create(true); finally tempObjektliste:=aObjektliste; ShowModal; Result:=tempObjektliste; tempObjektliste.free; end; |
AW: Objectliste an modales Fenster übergeben und zurück
Zitat:
Zitat:
Wozu ist überhaupt das Try-Finally gedacht?
Delphi-Quellcode:
Objekt-Variablen sind Zeiger/Pointer und du willst eh nur den Inahlt der Liste ändern.
procedure frmChild.Execute({var} aObjektliste: TKlasse);
begin tempObjektliste:=aObjektliste; ShowModal; end; Darum kein VAR, da du ja nicht den Zeiger ändern willst. |
AW: Objectliste an modales Fenster übergeben und zurück
Moin enricoffo,
ich würde es sogar so machen: Im modal aufzurufenden Fenster wird ein Feld unter private angelegt. Dann noch eine property unter public mit read und write, die dieses Feld benutzt. Das Formular, von dem aus aufgerufen wird, übergibt an die property das Object und ruft dann das Unterformular auf, dass dann damit etwas macht. Oder in Codeform:
Delphi-Quellcode:
Damit verbleibt die Verwaltung des Objektes beim Aufrufer.
TSubForm = class
private FObjectToWorkOn : TKlasse; public property ObjectToWorkOn : TKlasse read FObjectToWorkOn write FObjectToWorkOn; end; procedure TSubForm.OnShow... begin // Mach was mit ObjectToWorkOn end; procoedure TMainForm.IrgendeineMethode; begin SubForm.ObjectToWorkOn := MainForm.DasObjectDasManipuliertWerdenSoll; SubForm.ShowModal; end; Man sollte nur dann ein Objekt als Rückgabewert verwenden, wenn die Klasse die hierfür erzeugten Objekte intern verwaltet. (z.B. TListView mit TListView.Items.Add) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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