![]() |
TStringList als Result
Wie kann ich eine TStringList als Rückgabewert einer Funktion realisieren.
Mein Problem ist, ich will aus einem Dialog in dem eine TStringList gefüllt wird diese exportieren ins Hauptformular um dort sie weiterverarbeiten zu können. Jetzt mache ich es so. Hauptformular:
Delphi-Quellcode:
Dialog:
procedure TfrmMain.FormCreate(Sender: TObject);
begin FVarList:=TStringList.Create; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin FVarList.Free; end; procedure TfrmMain.GetVarList; begin With TfrmVarList.Create(nil) do begin ShowModal; FVarList:=GetList; Realease end; end;
Delphi-Quellcode:
Das will aber nicht. Da gibts immer ne Zugriffsverletzung.
procedure TfrmVarList.FormCreate(Sender: TObject);
begin FList:=TStringList.Create; end; procedure TfrmVarList.FormDestroy(Sender: TObject); begin FList.Free; end; function TfrmVarList.GetList:TStringList; begin Result:=FList; end; |
Re: TStringList als Result
probier mal:
Delphi-Quellcode:
und achte nebenbei mal auf deine Formatierungen und den try finally Block umd Resourcen zu schützen.
procedure TfrmMain.GetVarList;
begin with TFrmVarList.Create(Self) do try ShowModal; Self.FVarList.Assign(GetList); finally Release; end; end; Gruß Hagen |
Re: TStringList als Result
jetzt ist zwar die fehlermeldung weg, aber dennoch wird nicht der inhalt
der einen liste der anderen zugewiesen |
Re: TStringList als Result
Mach es mit einer Klassen-Methode. (Ist auch der bessere Stil, finde ich.)
Hauptformular:
Delphi-Quellcode:
Eingabeformular:
type
TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; begin sl := TStringList.Create; try if TForm2.GetUserInput(sl) then Listbox1.Items.Text := sl.Text; finally FreeAndNil(sl); end; end;
Delphi-Quellcode:
Klappt wunderbar.
type
TForm2 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } class function GetUserInput(out sl: TStringList): Boolean; end; var Form2: TForm2; implementation {$R *.dfm} class function TForm2.GetUserInput(out sl: TStringList): Boolean; begin with TForm2.Create(nil) do begin ShowModal(); sl.Add(Edit1.Text); Result := length(Edit1.Text) <> 0; Free(); end; end; procedure TForm2.Button1Click(Sender: TObject); begin ModalResult := mrOK; end; procedure TForm2.Button2Click(Sender: TObject); begin ModalResult := mrCancel; end; |
Re: TStringList als Result
Hi Luckie,
ich würde es persönlich so machen:
Delphi-Quellcode:
Dann kann man jeden Nachfahren von TStrings einsetzen und auch z.B. ComboBox1.Items als Parameter angeben - also eine vorhandene Liste weiterbenutzen.
class function TForm2.GetUserInput(List: TStrings): Boolean;
begin with TForm2.Create(nil) do begin ShowModal(); if Assigned(List) then List.Add(Edit1.Text); Result := length(Edit1.Text) <> 0; Free(); end; end; mfG mirage228 |
Re: TStringList als Result
Nö, eher so: :angle2:
Delphi-Quellcode:
class function TForm2.GetUserInput(List: TStrings): Boolean;
begin with TForm2.Create(nil) do begin try Result := (ShowModal = mrOK); // Bediener entscheidet mit OK oder Cancel-Button if Assigned(List) then List.Add(Edit1.Text); finally Free; end; end; end; |
Re: TStringList als Result
Ja, ja, ja. Es ging mir ja nur um das Prinzip. Btw ist die Prüfung überflüssig. Wie willst du die Methode ohne Übergabe eines korrekten Paramters aufrufen, ohne das der Compiler mekert?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 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