AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Objectliste an modales Fenster übergeben und zurück
Thema durchsuchen
Ansicht
Themen-Optionen

Objectliste an modales Fenster übergeben und zurück

Ein Thema von enricoffo · begonnen am 23. Jan 2018 · letzter Beitrag vom 24. Jan 2018
Antwort Antwort
enricoffo

Registriert seit: 24. Dez 2005
Ort: Keine Ergebnisse gefunden
38 Beiträge
 
Delphi 7 Professional
 
#1

Objectliste an modales Fenster übergeben und zurück

  Alt 23. Jan 2018, 23:38
Delphi-Version: 7
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;
Computer machen keine Fehler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Objectliste an modales Fenster übergeben und zurück

  Alt 24. Jan 2018, 04:19
Zitat:
Delphi-Quellcode:
Result:=tempObjektliste;
tempObjektliste.free;
Nach dem Free ist nicht mehr viel von dem Objekt übrig, auf welches das Result zeigt.

Zitat:
Delphi-Quellcode:
try
  tempObjektliste:=TKlasse.create(true);
finally
  tempObjektliste:=aObjektliste;
  ...
end;
Die erstellte Klasse landet als Speicherleck irgendwo, da tempObjektliste gleich wieder überschrieben wird.
Wozu ist überhaupt das Try-Finally gedacht?


Delphi-Quellcode:
procedure frmChild.Execute({var} aObjektliste: TKlasse);
begin
  tempObjektliste:=aObjektliste;
  ShowModal;
end;
Objekt-Variablen sind Zeiger/Pointer und du willst eh nur den Inahlt der Liste ändern.
Darum kein VAR, da du ja nicht den Zeiger ändern willst.
$2B or not $2B
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Objectliste an modales Fenster übergeben und zurück

  Alt 24. Jan 2018, 07:54
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:
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;
Damit verbleibt die Verwaltung des Objektes beim Aufrufer.

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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 20:36 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