当然,我在这里忽略了一些如此明显和简单的东西,但我就是看不到它。
我有一个树视图,节点在运行时添加到它,也可以删除。当我删除一个节点时,树中不再有一个选定的节点,HideSelection 也设置为 False 但这不会有任何区别,因为选定的节点被删除,我猜是标准行为。
无论如何,为了减少需要重新关注树视图的次数和输入,我想在删除一个节点后自动重新选择树中的一个节点(如果连续快速删除大量节点特别有用,因为它消除了单击的需要回到树视图)。
所以假设我有一棵这样的树:
这是我正在寻找的行为模式,以以下场景为例:
Item1
可以选择,当删除Root
成为选择。
Item2
可以选择,当删除Item6
成为选择。
Item3
可以选择,当删除Item4
成为选择。
Item4
可以选择,当删除Item5
成为选择。
Item5
可以选择,当删除Item4
成为选择。
Item5
可以选择,如果Item4
不存在则删除,Item3
则应选择。
Item5
可以选择,当删除时,如果Item3
或Item4
不存在,选择Item2
.
Item6
可以选择,当删除Item2
成为选择。
Item7
可以选择,当删除Item6
成为选择。
我不断让索引越界和其他 AV 错误(在 Lazarus 中),这甚至没有达到检查当前选定节点在树中的位置的地步。
就目前而言,在我的删除事件中,我有这个:
procedure TMainForm.actDeleteExecute(Sender: TObject);
var
SelNode: TTreeNode;
begin
if TreeView1.Selected <> nil then
begin
SelNode := TreeView1.Selected;
TreeView1.Selected.Delete;
TreeView1.SetFocus;
//ShowMessage(SelNode.GetPrev.Text);
TreeView1.Selected.Index := SelNode.Index;
end;
end;
这是我再次完全误解情况并使任务变得不必要的困难的情况,还是实施这种行为涉及大量工作?
提前谢谢了。