任何人都可以告诉我如何执行以下操作:
我想知道如何在应用程序运行时执行上述操作,例如在Form的OnCreate事件中。
答案 0 :(得分:14)
@Remus,这里有一个添加节点的简单示例。
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;
//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;