对于任何寻找答案的人,这就是我想出的……请记住,TreeView 及其所有节点都是动态创建的,并放置在动态创建的列表框项中。所有 treeView 和 TreeviewItem 组件的所有 .HitTest 属性都设置为“False”,并且我在每个树视图的展开按钮上放置了一个图像,以在下面执行我自己的操作:
procedure TMain_Form.Image1Click(Sender: TObject);
var
Item : TListBoxItem;
view : TTreeView;
tree1,
tree2 : TTreeViewItem;
height : extended;
i :integer;
begin
Item := TListBoxItem.Create(nil);
Item := TImage(Sender).Parent as TListBoxItem;
view := Item.Children.Items[1] as TTreeview;
tree1 := View.Items[0];
i := 0; height := 0;
while i <> Tree1.Count do begin
tree2 := tree1.Items[i];
height := height + 40;
i := i + 1;
end;
if item.Height = 40 then begin
tree1.ExpandAll;
item.Height := Item.height + height;
view.height := Item.height;
end else begin
View.CollapseAll;
Item.Height := 40;
end;
不需要'while'语句,我意识到这一点。我刚刚把它放在那里,在手被承认懒得改变它之前。