【问题标题】:Added Tree items won't show when tree view is expanded扩展树视图时不会显示添加的树项目
【发布时间】:2015-06-23 15:16:33
【问题描述】:

我有一个使用 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;

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

【问题讨论】:

标签: delphi delphi-xe8


【解决方案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;

【讨论】:

    【解决方案2】:

    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;
    

    【讨论】:

    • 是的,这取决于你想做什么。有时您希望选择保持原样,有时您希望将其更改为新添加的项目。
    • 好吧,我还没有尝试过 - 我很快就会尝试 - 但我认为问题不是我的节点在添加时需要扩展。例如,如果一个节点已经有子节点并且已经展开,如果我再添加另一个子节点,它可能会立即显示,则不会。
    • 在 Windows 上并非如此。我无法在 iOS 或 Android 中测试它。
    【解决方案3】:

    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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多