0

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

在应用程序中,我有一个带有树项的树视图。当我在展开同一个父节点时将树项添加到节点时,我需要 a) 从应用程序本身折叠并展开父节点,或者 b) 以编程方式执行此操作(见下文)以获取树项马上展示。我尝试调用“重绘”,但没有奏效。有更好的解决方法吗?有时当调用collapseall,expandall 就像我在下面做的那样,然后一些树节点变得无响应(不可选择),直到我第一次选择最顶部的树节点之后。

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;

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

4

3 回答 3

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;
于 2015-06-24T13:32:11.427 回答
1

Dsm 的解决方案有效,但更改了 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;
于 2015-06-24T14:10:25.107 回答
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;

希望这会在下一个版本中引起注意。

于 2015-10-19T19:48:27.490 回答