OnExit 后在 TTreeView 中保持选择
Keeping selection in TTreeView after OnExit
我有一个 TTreeView
组件,用于在表单中显示层次结构,我希望能够 select 一些组件并“操纵”它们,例如单击按钮移动它们。
我的问题是单击按钮后 selected 对象消失了。
我看到在 TCustomTreeView
class 中有一个 DoExit 过程:
procedure TCustomTreeView.DoExit;
begin
inherited;
InvalidateSelectionsRects;
end;
我试图重写这个方法,所以 InvalidateSelectionRects
没有被调用但没有用。
有没有办法在 TTreeView 外部进行交互时保留(多个)selected 元素?
编辑:根据 @dwrbudr 提供的提示,我能够列出 selected 项目,但最后一个没有出现:
将 selected 项目打印到备忘录中的代码:
procedure TForm1.Button7Click(Sender: TObject);
var
i: integer;
Seleccionado: TNodoArbolComponentes;
begin
Memo1.Lines.Clear;
for i := 1 to self.TreeView1.SelectionCount - 1 do
begin
Seleccionado := (TreeView1.Selections[i] as TNodoArbolComponentes);
Memo1.Lines.Add(Seleccionado.Componente.Name + ':' + Seleccionado.Componente.ClassName);
end;
end;
我点击了 Panel1、Panel2、Panel4 和 Panel3(按此顺序),但是 Panel3,因为它是我最后点击的,所以没有出现在 Selections
列表中。
我想我还应该检查 TreeView1.Selected
节点,看看它是否设置了 TreeView1.Selected.Selected
标志。
将树视图的 HideSelection
属性 设置为 False
TreeView.HideSelection := false;
我有一个 TTreeView
组件,用于在表单中显示层次结构,我希望能够 select 一些组件并“操纵”它们,例如单击按钮移动它们。
我的问题是单击按钮后 selected 对象消失了。
我看到在 TCustomTreeView
class 中有一个 DoExit 过程:
procedure TCustomTreeView.DoExit;
begin
inherited;
InvalidateSelectionsRects;
end;
我试图重写这个方法,所以 InvalidateSelectionRects
没有被调用但没有用。
有没有办法在 TTreeView 外部进行交互时保留(多个)selected 元素?
编辑:根据 @dwrbudr 提供的提示,我能够列出 selected 项目,但最后一个没有出现:
将 selected 项目打印到备忘录中的代码:
procedure TForm1.Button7Click(Sender: TObject);
var
i: integer;
Seleccionado: TNodoArbolComponentes;
begin
Memo1.Lines.Clear;
for i := 1 to self.TreeView1.SelectionCount - 1 do
begin
Seleccionado := (TreeView1.Selections[i] as TNodoArbolComponentes);
Memo1.Lines.Add(Seleccionado.Componente.Name + ':' + Seleccionado.Componente.ClassName);
end;
end;
我点击了 Panel1、Panel2、Panel4 和 Panel3(按此顺序),但是 Panel3,因为它是我最后点击的,所以没有出现在 Selections
列表中。
我想我还应该检查 TreeView1.Selected
节点,看看它是否设置了 TreeView1.Selected.Selected
标志。
将树视图的 HideSelection
属性 设置为 False
TreeView.HideSelection := false;