delphi TreeView - 在运行时创建节点

Rem*_*igo 9 delphi treeview

谁能告诉我如何做以下事情:

  • 创建节点
  • 启用/禁用单个节点

我想知道如何在Application运行时执行上述操作,例如在Form的OnCreate事件中.

RRU*_*RUZ 14

@Remus,这里有一个添加节点的简单示例.

添加根节点(级别0)

Var
  Node : TTreeNode;
begin
   //function TTreeNodes.Add(Sibling: TTreeNode; const S: string): TTreeNode;
   Node:=TreeView1.Items.Add(nil,'My Root Node') ;
   Node.ImageIndex:=0;//now you can change any  property of the node
end;
Run Code Online (Sandbox Code Playgroud)

添加子节点(级别> 0)

//in this case we add a child node in the current selected node.
    Var
      Node : TTreeNode;
    begin       
       if TreeView1.Selected= nil then exit;       
       Node:=TreeView1.Items.AddChild(TreeView1.Selected,'My Child Node') ;
       Node.ImageIndex:=0;//now you can change any property of the node
    end;
Run Code Online (Sandbox Code Playgroud)

添加许多节点

如果您想使用循环或其他东西添加许多节点,则必须在对树视图进行更改之前使用BeginUpdate.完成所有更改后,请调用EndUpdate以在屏幕上显示更改.在添加,删除或插入节点时,BeginUpdate和EndUpdate可防止过度重绘并加快处理时间.

Var
  Node : TTreeNode;
  i    : Integer;
begin
  TreeView1.Items.BeginUpdate;
  try
   for i:=1 to 100 do
   begin
    Node:=TreeView1.Items.Add(nil,'My Root Node '+IntToStr(i)) ;
    Node.ImageIndex:=0;
   end;
  finally
  TreeView1.Items.EndUpdate;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

关于禁用节点,不存在任何类似的属性.


Leo*_*Leo 9

添加节点:

function FindRootNode(ACaption: String; ATreeView: TTreeView): TTreeNode; 
var LCount: Integer; 
begin 
  result := nil; 
  LCount := 0; 
  while (LCount < ATreeView.Items.Count) and (result = nil) do 
  begin 
    if (ATreeView.Items.Item[LCount].Text = ACaption) and (ATreeView.Items.Item[LCount].Parent = nil) then 
      result := ATreeView.Items.Item[LCount]; 
    inc(LCount); 
  end; 
end;

...

var LDestNode: TTreeNode; 
begin 
  LDestNode := FindRootNode('category', TreeView1); 
  if LDestNode <> nil then 
  begin 
    TreeView1.Items.AddChild(LDestNode, 'node1'); 
    TreeView1.Items.AddChild(LDestNode, 'node2'); 
  end; 
end;
Run Code Online (Sandbox Code Playgroud)

(另请参阅http://msdn.microsoft.com/en-us/library/70w4awc4.aspx)

消除节点

据我所知,没有办法禁用TreeNode.你唯一能做的就是拦截beforeSelect-event并取消那里的选择.不太好.