扩展树视图时,不会显示添加的树项

时间:2015-06-23 15:16:33

标签: delphi delphi-xe8

我有一个用Delphi XE8 FMX开发的iOS / android应用程序。

在应用程序中,我有树视图的树视图。当我在展开相同的父节点时向节点添加树项时,我需要a)从应用程序本身折叠和展开父节点,或者b)以编程方式(见下文)执行该操作以获取树项目马上表演。我试着叫'重画',但那没用。有更好的解决方法吗?有时在调用collapseall时,像我在下面那样展开,然后一些树节点变得无响应(不可选),直到我第一次选择最顶层的树节点之后。

procedure TnewForm.AddTreeItemClick(Sender: TObject);
var
  t:TTreeViewItem;
begin
  t:=TTreeViewItem.Create(nil);
  t.Text:=NewTreeItemEdit.Text;
  if TreeView.Selected<>nil then
  begin
    t.Parent:=TreeView.Selected
  end else
    t.Parent:=TreeView;
  //Treeview.Repaint;
  treeview.CollapseAll;
  treeview.ExpandAll;
  NewTreeItemEdit.Text:='';
end;

如何在不折叠/展开树视图的情况下立即显示动态添加的树项目?

3 个答案:

答案 0 :(得分:1)

你可以试试这个。

procedure TnewForm.AddTreeItemClick(Sender: TObject);
var
  t:TTreeViewItem;
begin
  t:=TTreeViewItem.Create(nil);
  t.Text:=NewTreeItemEdit.Text;
  if TreeView.Selected<>nil then
  begin
    t.Parent:=TreeView.Selected
  end else
    t.Parent:=TreeView;
  //Treeview.Repaint;
  treeview.Selected := t;
  NewTreeItemEdit.Text:='';
end;

答案 1 :(得分:1)

Dsm's solution有效,但更改了TreeView的选择。如果您希望选择保持不变,而只是添加的项目立即可见,那么展开其父项:

procedure TForm1.AddTreeItemClick(Sender: TObject);
var
  T :TTreeViewItem;
begin
  T := TTreeViewItem.Create(nil);
  T.Text := NewTreeItemEdit.Text;
  if TreeView.Selected <> nil then
  begin
    T.Parent := TreeView.Selected;
    TreeView.Selected.IsExpanded := True;
  end else
    T.Parent := TreeView;
  NewTreeItemEdit.Text := '';
end;

答案 2 :(得分:1)

与Windows / XE8类似的问题。 为我做的解决方法:

  if Assigned(TV.Selected) then
    begin
      N := TTreeviewItem.Create(Self);
      N.Text := 'Another child';
      N.Parent := TV.Selected;
      N.IsExpanded := TRUE; // This seems to do the trick
    end;

希望在下一版本中引起关注。