皆様いつもお世話になっております。
ファイル検索をしてListViewに表示させて、複数項目を飛び飛びでも選択して、そのファイルを削除したいのですがうまくいきません。
カラム情報はCaptionがファイル名、SubItems[0]がパス名、SubItems[1]がサイズ、SubItems[2]が更新年月日です。
あるサイトに下記のような複数項目を飛び飛びでも選択して削除する例がありました。
これは、あくまでListViewの項目は削除しますが、連続でもない項目の情報を一度保存して、これを元に実際のファイル情報を取り出して削除したらと考えて試しましたが・・・できません。
下記の例でファイル名、パス名を取得する方法を教えて頂けませんか。
あるいは、他の方法があったら教えて頂ければありがたいです。
よろしくお願い致します。m(__)m
*********以下はサイトの例です。
var SelectedItem, DeleteItem: TListItem;
begin
if ListView1.Selected<>nil then //選択状態ならば
begin
SelectedItem:=ListView1.Selected;
while SelectedItem<>nil do
begin
DeleteItem:=SelectedItem;
SelectedItem:=ListView1.GetNextItem(SelectedItem,sdBelow,[isSelected]);
DeleteItem.Delete;
end;
end
else
MessageBox(Handle,'リストを選択してください。',nil,MB_OK or MB_ICONERROR);
end;
**********ここまで
おぬし、まだまだ修行が足らん。
var
DeleteItem: TListItem;
begin
if ListView1.Selected <> nil then begin // 選択状態ならば
while ListView1.Selected <> nil do begin
DeleteItem := ListView1.Selected;
DeleteFile(DeleteItem.SubItems[0] +'\'+ DeleteItem.Caption);
DeleteItem.Delete;
end;
end else
MessageBox(Handle,'リストを選択してください。', nil, MB_OK or MB_ICONERROR);
これじゃいかんの?
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
with ListView1 do
if Selected <> nil then
for i := 0 to ListView1.Items.Count -1 do
if Items[i].Selected then
begin // 選択されている。
end;
end;
>大豆Zさん
ファイルを削除するんですよね?
だとしたら、その方法だとfor文を回しながら削除することになるので、始め(ListView1.Items.Count-1)個あったItemの数が最後の方では(ListView1.Items.Count-1-α)個になってしまいます。
それにもかかわらず、for文は(ListView1.Items.Count-1)までItemがあるものとして回りつづけてしまうのでEListIndexErrorが出てしまうでしょう?
こちらなら大丈夫(なハズ)
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
with ListView1 do
if Selected <> nil then
for i := ListView1.Items.Count-1 downto 0 do
if Items[i].Selected then
begin // 選択されている。
// 削除のコード
end;
end;
信玄さん、大豆Zさん、flatさん、早速ご指導ありがとうございました。
解決しました。ありがとうございました。
仰せの通り、未熟者で、レベルの低い質問ですが、今後ともよろしくお願い致します。
また教えてください。m(__)m
ツイート | ![]() |