TListBox 및 TListBoxItem을 사용하여 Delphi 10.2 Tokyo에서 이해할 수없는 부분이 있습니다.ListBoxItem 보이는 오류
첫 번째 문자를 변경하면 TListBoxGroupHeader가 추가 될 때 일부 값 (TListBoxItem)이 내 ListBox에로드됩니다.
procedure TForm1.Button1Click(Sender: TObject);
var
lbItem: TListBoxItem;
Letter: string;
ListBoxGroupHeader: TListBoxGroupHeader;
i: integer;
ListValue: TStringList;
begin
Letter := '';
ListValue := TStringList.Create;
try
ListValue.Add('Germany');
ListValue.Add('Georgie');
ListValue.Add('France');
ListValue.Add('Venezuela');
ListValue.Add('Poland');
ListValue.Add('Russia');
ListValue.Add('Sweden');
ListValue.Add('Denmark');
ListBox1.BeginUpdate;
for i := 0 to ListValue.Count - 1 do
begin
if Letter <> Copy(ListValue[i], 0, 1).ToUpper then
begin
ListBoxGroupHeader := TListBoxGroupHeader.Create(ListBox1);
ListBoxGroupHeader.Text := Copy(ListValue[i], 0, 1).ToUpper;
ListBox1.AddObject(ListBoxGroupHeader);
end;
lbItem := TListBoxItem.Create(ListBox1);
lbItem.Text := ListValue[i];
lbItem.Tag := i;
ListBox1.AddObject(lbItem);
Letter := Copy(ListValue[i], 0, 1).ToUpper;
end;
finally
ListBox1.EndUpdate;
FreeAndNil(ListValue);
end;
end;
이 ListBox에서 검색하려면 TEdit을 사용합니다. 여기에 내가 문제가있다. ListBoxItem에 Edit I의 내용이 들어있는 경우 Visible을 True로 설정하고 그렇지 않으면 False로 설정합니다.
procedure TForm1.Edit1ChangeTracking(Sender: TObject);
var
i : integer;
ListBoxItem: TListBoxItem;
begin
ListBox1.BeginUpdate;
try
for i := 0 to ListBox1.Items.Count - 1 do
begin
if ListBox1.ListItems[i] is TListBoxItem then
begin
ListBoxItem := TListBoxItem(ListBox1.ListItems[i]);
if Edit1.Text.Trim = '' then
begin
ListBoxItem.Visible := True
end
else
begin
if ListBox1.ListItems[i] is TListBoxGroupHeader then
ListBoxItem.Visible := False
else
ListBoxItem.Visible := ListBoxItem.Text.ToLower.Contains(Edit1.Text.Trim.ToLower);
end;
end;
end;
finally
ListBox1.EndUpdate;
end;
end;
첫 번째 GroupHeader (글자 G)는 항상 표시됩니다. GroupHeader 뒤에 ListBoxItem이있는 것처럼 보입니다. 체크 포인트를 사용할 때 Visible은 false로 설정되어 있습니다 .. 이해할 수 없었습니다 ..
글자 "V"를 쓰면 GroupHeader 만 표시됩니다. 문자 "G".
GroupHeader 인 경우 텍스트 값을 변경하려고합니다.
if ListBox1.ListItems[i] is TListBoxGroupHeader then
ListBoxItem.Text := '>>' + ListBoxItem.Text + '<<'
그게 전부 변경 텍스트가 아닌 첫 GroupHeader (편지 G)에 대한이 ... 내가 나쁜 사용하는 경우
알고하지 마십시오, 또는 버그가 있다면?
예. 버그가 있습니다 (항목 표시 설정시). 어쨌든, 나는 이것이 당신이 원하는 것을 생각하지 않습니다. 난 당신이 국가를 검색하고 비 머리말 항목에서 검색이 필요없는 해당 항목이없는 머리글을 숨길 해당 머리글과 일치하는 텍스트 만 표시하려고한다고 생각합니다. 그것이 당신이 달성하기를 원하는 것입니까? – Victoria
@ 빅토리아는 대답을 주셔서 감사합니다. TVetScrollBox와 TLayout을 사용하여 내 TRecangle을 만드는 고유 한 메뉴를 만들기로 결정했습니다. 그 일을 수행하면서 Embarcadero의 버그 추적기에서 작업을 생성합니다. – Bosshoss