본문 바로가기

파이어몽키

[FMX] ListBox 전체체크 기능 구현하기

리스트박스(TListBox)에 체크박스를 두고 버튼 클릭 시 전체체크하는 기능에 대한 문의가 있어 정리해 봤습니다.


이 글에서는 아래 내용을 학습할 수 있습니다.

  • 리스트박스를 동적으로 생성하는 방법
  • 리스트박스 아이템에 체크박스를 표시하는 속성

화면 구성

컴포넌트 속성 설정

주요 속성을 설정합니다.(Object Inspector에서 속성을 설정해도 됩니다.)

procedure TForm2.FormCreate(Sender: TObject);
begin
  Button1.StaysPressed := True; //버튼 눌림(IsPressed) 상태 유지

  ListBox1.DefaultItemStyles.ItemStyle := 'listboxitemrightdetail'; // 텍스트와 오른쪽에 상세정보가 표시되도록 기본속성 지정
  ListBox1.ShowCheckboxes := True; // 리스트박스 항목에 체크박스가 표시되도록 설정
end;

새로고침

procedure TForm2.Button2Click(Sender: TObject);
var
  I: Integer;
  Item: TListBoxItem;
begin
  ListBox1.Items.Clear;
  ListBox1.BeginUpdate;
  try
    for I := 0 to 10 do
    begin
      Item := TListBoxItem.Create(ListBox1);
      Item.Parent := ListBox1;
      Item.Text := 'Item ' + I.ToString;
      Item.ItemData.Detail := 'Description';
    end;
  finally
    ListBox1.EndUpdate;
  end;
end;

전체선택

procedure TForm2.Button1Click(Sender: TObject);
var
  I, Idx: Integer;
begin
  Idx := ListBox1.ItemIndex;
  ListBox1.BeginUpdate;
  try
    for I := 0 to ListBox1.Items.Count - 1 do
    begin
      ListBox1.ListItems[I].IsChecked := Button1.IsPressed;
    end;
  finally
    ListBox1.EndUpdate;
    ListBox1.ItemIndex := Idx;
  end;
end;

소스코드

ProjectLBCheck.zip


Tips>

커스텀 스타일로 TListBoxItem 스타일을 만드는 경우 TCheckBox의 StyleName을 "check"로 지정하기 바랍니다.