ListViewでランダムに選択された項目のファイルを削除するには?

解決


武田  2005-05-07 23:25:25  No: 14671

皆様いつもお世話になっております。
ファイル検索をして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;
**********ここまで


信玄  2005-05-08 00:31:54  No: 14672

おぬし、まだまだ修行が足らん。

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);


大豆Z  2005-05-08 00:52:20  No: 14673

これじゃいかんの?

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;


flat  2005-05-08 01:35:42  No: 14674

>大豆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;


武田  2005-05-08 06:03:36  No: 14675

信玄さん、大豆Zさん、flatさん、早速ご指導ありがとうございました。
解決しました。ありがとうございました。

仰せの通り、未熟者で、レベルの低い質問ですが、今後ともよろしくお願い致します。
また教えてください。m(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加