Краткая версия: есть ли способ управлять или изменять элементы LisBox по отдельности? например, установите для их свойства Visible значение False отдельно. Я нашел класс TListBoxItem в Fire Monkey, когда искал, но я не хочу использовать Fire Monkey и хочу его в VCL.
Подробная версия: я попытался отфильтровать свой ListBox, используя два TStringList и Edit, один StringList является глобальным, чтобы сохранить исходный список (list_files_global
), а другой StringList, чтобы помочь процедуре фильтрации (list_files_filter
) и мой основной список files - это мой ListBox (list_files
). Я создал свой глобальный список StringList в событии onCreate
, когда программа начала сохранять мой исходный список:
procedure Tfrm_main.FormCreate(Sender: TObject);
Begin
list_files_global := TStringList.Create;
list_files_global.Assign(list_files.Items);
End;
и использовал событие Edit onChange
для фильтрации:
procedure Tfrm_main.edit_files_filterChange(Sender: TObject);
Var
list_files_filter: TStringList;
i: Integer;
Begin
list_files_filter := TStringList.Create;
list_files_filter.Assign(list_files.Items);
list_files.Clear;
for i := 0 to list_files_filter.Count - 1 do
if pos(edit_files_filter.text, list_files_filter[i]) > 0 then
list_files.Items.Add(list_files_filter[i]);
End;
а для отключения фильтра просто восстановите список из моего глобального списка, который я создал сначала:
list_files.Items := list_files_global;
здесь пока все работает нормально, но проблема в том, когда я пытаюсь редактировать / переименовывать / удалять элементы из отфильтрованного списка, например, я меняю элемент:
list_files.Items[i] := '-- Changed Item --';
список будет отредактирован, но когда я отключу фильтр, исходный список вернется, и все изменения будут потеряны. поэтому я хочу знать, есть ли способ решить эту проблему? Что-то вроде скрытия элементов по отдельности или изменения видимости элементов и т. Д., Чтобы я мог изменить алгоритм фильтрации и избавиться от всего этого, создавая лишние списки. Я искал в Интернете и просматривал файл справки Delphi целый день, но ничего полезного не обнаружил.