Delphi 10.2 TokyoのTListBoxとTListBoxItemでわからないことがあります。ListBoxItem Visible Error
一部の値(TListBoxItem)は、リストボックスにロードされます。最初の文字が変更されたときにTListBoxGroupHeaderが追加されます。
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のコンテンツが含まれている場合は、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
@Victoriaは答えてくれてありがとうございました。私は自分のTRecangleを作成するTVertScrollBoxとTLayoutで独自のメニューを作成することにしました。それは仕事です。私はEmbarcaderoのバグトラッカーでタスクを作成します。 – Bosshoss