Я пытаюсь отфильтровать список в Delphi с помощью поля «Редактировать», но он не работает. Вот мой код, основанный на событии OnChange в поле «Редактировать».Фильтрация списка с помощью поля «Редактировать»
procedure TReportDlgForm.FilterEditOnChange(Sender: TObject);
var
I: Integer;
begin
ListBox1.Items.BeginUpdate;
try
for I := 0 to ListBox1.Items.Count - 1 do
ListBox1.Selected[I] := ContainsText(ListBox1.Items[I], FilterEdit.Text);
finally
ListBox1.Items.EndUpdate;
end;
end;
Я надеюсь, что когда я наберу в своем поле редактирования, что элементы списка будут фильтроваться.
* Фильтр * каким образом именно? Все, что вы делаете, - это выделение элементов в зависимости от соответствия текста. У вас есть MultiSelect включен в ListBox? Чего вы действительно пытаетесь достичь? Возможно, вы на самом деле пытаетесь скрыть несоответствующие элементы? Если это так, вам нужно будет оставить свой основной список строк отдельно от самого ListBox, тогда вы можете «Очистить»() 'ListBox и' Add() 'соответствующие элементы к нему по мере необходимости. Или сохраните отфильтрованные результаты в отдельном списке и используйте ListBox в виртуальном режиме, чтобы отобразить этот список. –
@Remy - У меня нет MutiSelect включен в ListBox. Я хотел бы, чтобы пользователь вводил строку в поле «Редактировать», что отображаются только записи, содержащие эту строку, и несогласованные записи скрыты в ListBox. Например, предположим, что у меня изначально было 40 записей, отображаемых в ListBox. По мере того, как пользователь вводит в поле редактирования, количество записей в ListBox уменьшается, чтобы показывать только соответствующие записи в зависимости от того, что пользователь ввел в поле редактирования. – Hackbrew