리스트박스(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;
소스코드
Tips>
커스텀 스타일로 TListBoxItem 스타일을 만드는 경우 TCheckBox의 StyleName을 "check"로 지정하기 바랍니다.