treeview的创建通过加载一个文本文件,想对treeview实现搜索功能,在edit输入搜索的内容:比如movie,那么就激活treeview上节点text为movie的节点,怎么实现?如果满足条件的有多个,又给怎么处理呢?

解决方案 »

  1.   

    这就是遍历树的问题啊,我有一段你可以参考一下:
    //根据字符串查找节点,返回树的节点。
    function GetNodeByCode(sCode: String;tv_Tree: TTreeView): TTreeNode;
    var
      c : String;
      i : integer;
    begin
      Result := nil;
      for i := 1 to  tv_Tree.Items.Count-1 do
      begin
        c := tv_Tree.Items.Item[i].Text;   
        if sCode = c then
        begin
           Result := tv_Tree.Items.Item[i];
           break;
        end;
      end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
      for i:=0 to TreeView1.Items.Count-1 do
       if TreeView1.Items[i].Text=Edit1.Text then
       begin
           TreeView1.Selected:=TreeView1.Items[i];
           exit;
       end;
       showmessage('no');
    end;
    如果找到多个,只激活第一个找到的节点
      

  3.   

    var
    i:integer;
    begin
    for i:=0 to treeview1.Items.Count-1 do
      begin
      if treeview1.Items[i].Text=edit1.Text then
        begin
        treeview1.SetFocus;
        treeview1.Items[i].Selected:=true;
        如果单纯是选择则不用加下面一行代码,如果要执行Treeview1的双击事件则加入下面一行代码!
        TreeView1DblClick(Sender);
        break;
        end;
      end;
    end;
      

  4.   

    我是菜鸟, 在执行for i:=0 to TreeView1.Items.Count-1 do这个循环的时候,是依次对照每一个节点,如果在判断语句if后面加上 …… else showmessage('no');这样就会出现遍历每一行,也就是如果一旦没又搜索到就会showmessage一次.....很麻烦,我想是找到就激活,没找到就只showmessage一次就可以,并不是要针对每一行搜索过后就要showmessage一次,大侠们,代码怎么改?
      

  5.   

    for i := 0 to treeview.items.count-1 do
      begin
        if Edit1.text = treeview.items[i].text then
        begin
          treeview.items[i].checked := true;
        end;
      end;绝对可行,多个相同的也行