C++Builder Tips


リストビュー・列の削除


リストビューのカラムヘッダをクリックして列を削除するサンプルです。

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  ListView1->ViewStyle = vsReport;

  for (int i=0;i<5;i++){
    ListView1->Columns->Add()->Caption = "Field" + IntToStr(i);
  }

  for (int i=0;i<10;i++){
    ListView1->Items->Add()->Caption = i;
    ListView1->Items->Item[i]->SubItems->Add("項目1-" + IntToStr(i));
    ListView1->Items->Item[i]->SubItems->Add("項目2-" + IntToStr(i));
    ListView1->Items->Item[i]->SubItems->Add("項目3-" + IntToStr(i));
    ListView1->Items->Item[i]->SubItems->Add("項目4-" + IntToStr(i));
  }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
TListColumn *Column)
{
  if (ListView1->Columns->Count==1){
    ListView1->Columns->Clear();
    ListView1->Items->Clear();
    return;
  }

  if (Column->Index==0){
    for (int i=0;i<ListView1->Items->Count;i++){
      for (int j=0;j<ListView1->Items->Item[i]->SubItems->Count;j++){
        AnsiString strMoto = ListView1->Items->Item[i]->SubItems->Strings[j];
        if (j==0){
         ListView1->Items->Item[i]->Caption = strMoto;
        }else{
         ListView1->Items->Item[i]->SubItems->Strings[j - 1] = strMoto;
        }
      }
      ListView1->Items->Item[i]->SubItems->Delete(ListView1->Items->Item[i]->SubItems->Count-1);
    }
  }else{
     for (int i=0;i<ListView1->Items->Count;i++){
       ListView1->Items->Item[i]->SubItems->Delete(Column->Index-1);
     }
  }

  //ヘッダの削除
  ListView1->Columns->Delete(Column->Index);

}
//---------------------------------------------------------------------------

DownLoad bcbtips073.lzh 4KB(BCB5)