Я использую TTreeView с TImageList.Мое древовидное представление представлено аналогично древовидному представлению Windows, где у меня есть узлы группы и узлы элементов.
Когда узлы группы создаются, они имеют 2 индекса изображения, как установлено в списке изображений, один для закрытой папки (imgGroupClosed)значок второй - для значка открытой папки (imgGroupOpen).
Когда я добавляю другие типы узлов, они используют другой значок, также установленный из списка изображений.
Теперь на мой вопрос, какубедиться, что узлы группы показывают правильный значок?например, если я удаляю или перемещаю узел дочернего элемента, группа, у которой больше нет дочерних элементов, должна отображаться как закрытая, но она отображается как открытая.
Я попытался написать процедуру многократного использования, например:
procedure TfrmMain.UpdateGroupImages;
var
Node: TTreeNode;
i: Integer;
begin
if TreeView1.Items.Count > 0 then
begin
for i := 0 to TreeView1.Items.Count - 1 do
begin
Node := TreeView1.Items[i];
case Node.ImageIndex of
imgGroupClosed, imgGroupOpen:
begin
if Node.HasChildren then
begin
if Node.Expanded then
begin
Node.ImageIndex := imgGroupOpen;
Node.SelectedIndex := imgGroupOpen;
end
else
begin
Node.ImageIndex := imgGroupClosed;
Node.SelectedIndex := imgGroupClosed;
end
end
else
begin
Node.ImageIndex := imgGroupClosed;
Node.SelectedIndex := imgGroupClosed;
end;
end;
end;
end;
end;
end;
Я вызывал это в некоторых событиях Treeview, таких как OnCollapsed, OnExpanded, OnDeletion, OnDragDrop и т. Д., Но, похоже, он работает неправильно.
Есть ли лучший способ сделать это, илиМожет ли кто-нибудь помочь обновить / исправить мой код выше?
В основном проблема, которую я получаю, заключается в том, что узлы группы не обновляют изображения правильно, поэтому иногда у меня остается значок открытой папки, когда нет дочерних элементов или они не развернуты.и т.д.
Спасибо, Крейг.