0

Delphi XE8 FMX で開発された iOS/Android 用のアプリケーションがあります。

アプリには、ツリー アイテムを含むツリービューがあります。同じ親ノードが展開されているときにツリー項目をノードに追加すると、a) アプリ自体から親ノードを折りたたんで展開するか、b) プログラムでそれを実行して (以下を参照)、ツリー項目を取得する必要があります。すぐに表示します。「repaint」を呼び出してみましたが、うまくいきませんでした。より良い回避策はありますか?以下のように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

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 に答える
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 に答える