delphi TreeView-在运行时创建节点

delphi TreeView-在运行时创建节点,delphi,treeview,Delphi,Treeview,有谁能告诉我如何做到以下几点: 创建节点 启用/禁用单个节点 我想知道如何在应用程序运行时执行上述操作,例如在表单的OnCreate事件中。添加节点: 函数FindRootNode(acoption:String;ATreeView:TTreeView):TTreeNode; var-LCount:整数; 开始 结果:=无; l计数:=0; 而(LCount0) 添加多个节点 如果要使用 循环或其他你必须使用的东西 在进行更改之前开始更新 到树上看。当所有更改都被删除时 完成后,调用EndU

有谁能告诉我如何做到以下几点:

  • 创建节点
  • 启用/禁用单个节点
我想知道如何在应用程序运行时执行上述操作,例如在表单的OnCreate事件中。

添加节点:
函数FindRootNode(acoption:String;ATreeView:TTreeView):TTreeNode;
var-LCount:整数;
开始
结果:=无;
l计数:=0;
而(LCount
(另见)

取消对节点的标记
据我所知,没有办法禁用TreeNode。您唯一能做的就是截取beforeSelect事件并在那里取消选择。不太好。

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

添加根节点(级别0) 添加子节点(级别>0) 添加多个节点 如果要使用 循环或其他你必须使用的东西 在进行更改之前开始更新 到树上看。当所有更改都被删除时 完成后,调用EndUpdate以显示 屏幕上的变化。开始更新和 EndUpdate防止过度重画 并在需要时加快处理时间 添加、删除或插入节点


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

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

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

TCustomViewItem中存在一个“可选”属性,Item属性从中派生。这可能表现为一种禁用机制。我知道Selective是如何工作的,但我想在MainForm.OnCreate中执行此操作event@Mark:此“TCustomViewItem”在Delphi的哪个版本中?我找不到它@雷莫斯:这是否意味着你在试图避开事件处理程序。否则,您可以在表单的OnCreate中填充一个“禁用节点”列表或数组,并在树视图的onChange和OnCustomDrawItem上对照这些项进行检查。OTOH Shell Controls>ver有一个TVIS_EX_DISABLED标志。6.00(Vista?),但它真正做的只是用禁用的颜色绘制文本,而不是在单击时绘制选定的外观。事实上,该项目已被选中。@Sertac:我正在查看Delphi 7帮助文件。
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;
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;
procedure TForm.OnChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
  AllowChange := CheckSomePropertiesOfNode(Node);
end;