delphi TreeView - 在运行时创建节点

时间:2010-01-29 16:14:52

标签: delphi treeview

任何人都可以告诉我如何执行以下操作:

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

我想知道如何在应用程序运行时执行上述操作,例如在Form的OnCreate事件中。

3 个答案:

答案 0 :(得分: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;

添加子节点(级别> 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;

添加多个节点

  

如果你想使用a添加许多节点   循环或你必须使用的其他东西   在进行更改之前的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;

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

答案 1 :(得分: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;

(另见http://msdn.microsoft.com/en-us/library/70w4awc4.aspx

取消节点

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

答案 2 :(得分:2)

您可以在OnChanging事件处理程序中禁用选择。这是TTreeView的事件。

procedure TForm.OnChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
  AllowChange := CheckSomePropertiesOfNode(Node);
end;