![]() |
TStrings/TStringlist : funktioniert aber ...
ich will die Liste der ausgewählten Dateinamen weiterverarbeiten. Mein Code funktioniert (scheinbar),
warum brauche ich eigentlich den Typecast von TStrings nach TStringlist? Ist dies die beste Code-Lösung meine ausgewählten Dateien weiterzubearebiten?
Delphi-Quellcode:
....
var OpenDialog: TOpenDialog; SelectedFiles: TStrings; begin OpenDialog := TOpenDialog.Create(nil); try OpenDialog.Options := [TOpenOption.ofAllowMultiSelect]; // Customize the filter as needed OpenDialog.Filter := 'All Files|*.*'; if OpenDialog.Execute then begin SelectedFiles := OpenDialog.Files; // Process the selected files (e.g., display their names) ShowMessage('Selected files: ' + SelectedFiles.Text); lst_ImageList.clear; lst_ImageList.items.AddStrings(SelectedFiles) ; EvaluateSelectedFiles ( TStringList( SelectedFiles ) ); end; finally OpenDialog.Free; end; end; procedure TForm.EvaluateSelectedFiles(SelectedFiles : TStringList); |
AW: TStrings/TStringlist : funktioniert aber ...
Wofür brauchst Du SelectedFiles?
Delphi-Quellcode:
Und damit sollte dann klar sein, warum der Typcast erforderlich ist, EvaluateSelectedFiles erwartet eine TStringList, OpenDialog.Files ist aber vom Typ TStrings.
var
OpenDialog: TOpenDialog; begin OpenDialog := TOpenDialog.Create(nil); try OpenDialog.Options := [TOpenOption.ofAllowMultiSelect]; // Customize the filter as needed OpenDialog.Filter := 'All Files|*.*'; if OpenDialog.Execute then begin // Process the selected files (e.g., display their names) ShowMessage('Selected files: ' + OpenDialog.Files.Text); lst_ImageList.clear; lst_ImageList.items.AddStrings(OpenDialog.Files) ; EvaluateSelectedFiles(TStringList(OpenDialog.Files)); end; finally OpenDialog.Free; end; end; procedure TForm.EvaluateSelectedFiles(SelectedFiles : TStringList);
Delphi-Quellcode:
Dann geht's auch ohne Typcast.
var
OpenDialog: TOpenDialog; SelectedFiles: TStringList; begin OpenDialog := TOpenDialog.Create(nil); SelectedFiles := TStringList.Create; try OpenDialog.Options := [TOpenOption.ofAllowMultiSelect]; // Customize the filter as needed OpenDialog.Filter := 'All Files|*.*'; if OpenDialog.Execute then begin // Process the selected files (e.g., display their names) SelectedFiles.AddStrings(OpenDialog.Files); ShowMessage('Selected files: ' + SelectedFiles.Text); lst_ImageList.clear; lst_ImageList.items.AddStrings(OpenDialog.Files) ; EvaluateSelectedFiles(SelectedFiles); end; finally SelectedFiles.Free; OpenDialog.Free; end; end; procedure TForm.EvaluateSelectedFiles(SelectedFiles : TStringList); |
AW: TStrings/TStringlist : funktioniert aber ...
Zitat:
Zitat:
|
AW: TStrings/TStringlist : funktioniert aber ...
Stimmt, wenn in EvaluateSelectedFiles keine Möglichkeiten von TStringList benötigt werden sondern nur die von TStrings geerbten.
|
AW: TStrings/TStringlist : funktioniert aber ...
Zitat:
Edit: Wie Du ja schon geschrieben hattest. |
AW: TStrings/TStringlist : funktioniert aber ...
Zitat:
Delphi-Quellcode:
SelectedFiles := OpenDialog.Files;
... property Files: TStrings read GetFiles; ... function TOpenDialog.GetFiles: TStrings; begin Result := FFiles; end; ... constructor TOpenDialog.Create(AOwner: TComponent); begin inherited Create(AOwner); FHistoryList := TStringList.Create; FOptions := [ofHideReadOnly, ofEnableSizing]; FFiles := TStringList.Create; ... |
AW: TStrings/TStringlist : funktioniert aber ...
Dennoch ist nicht 100%ig sichergestellt, dass es wirklich ein TStringList ist.
z.B. falls die "fremde" Komponente mal unbemerkt umgebaut wird. Außerdem, könnte irgendwann mal etwas Anderes verwendet werden, um in dieser Variable zu landen. Oder z.B.
Delphi-Quellcode:
,
EvaluateSelectedFiles(TStringList(lst_ImageList.items));
was inhaltlich das Gleiche wäre, aber eben definitiv einen falschen Cast ergäbe, z.B. bei einer TListBox oder TComboBox, aber auch bei einem TMemo uvm. So wäre es korrekt
Delphi-Quellcode:
,
EvaluateSelectedFiles(OpenDialog.Files as TStringList);
oder eben das EvaluateSelectedFiles mit TStrings deklarieren, falls möglich, wie bereits erwähnt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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