這是一棵樹Tree
Root
  |--aaa
  |--bbb--bbb1
--bbb2
--bbb3
  |--ccc
  |--ddd--ddd1
--ddd2
  |--eee--eee1
--eee3
--eee4
--eee5這是一個ListBox1
| aaa |
| bbb |
| ccc |
| ddd |
| eee |我的要求是這樣的:
當我移動ListBox1的Item時,Tree中節點(aaa,bbb,ccc,ddd,eee...)對應的要選中,即是反白的方式如我選中ListBox1中的ddd,那Tree中的節點ddd就被選中為反白;如我選中ListBox1中的aaa,那Tree中的節點aa就被選中為反白;

解决方案 »

  1.   

    参考{----------------TreeView Option ---------------------------}
    function TreeAddItem(Sender: TTreeView; ItemList: TStrings;
      Book: TBook; Resort: Boolean): TTreeNode;
    var
      ThisNode, Node: TTreeNode;
      I: Integer;
    begin
      Node := nil;   //nil = level 0 has no parent node
                    //this is checked by TreeFindItem
      for I := 0 to Itemlist.count -1 do
      begin
        ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
        if ThisNode <> nil then Node := ThisNode else
        begin
          if I < Itemlist.count -1 then
          begin
            if I = 0 then
              Node := Sender.items.Add(Node, Itemlist[i]) else
              Node := Sender.items.AddChild(Node, Itemlist[i]);
          end else
          begin
            if I = 0 then
              Node := Sender.items.AddObject(Node, Itemlist[i], Book) else
              Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
          end;
          Node.stateIndex := Node.level + 1;
          if Resort and (Node.parent <> nil) then
            Node.parent.alphasort;
        end;
      end;
      Result := Node;
    end;function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode;
      Name: String): TTreeNode;
    begin
      if NodeItem = nil then
        NodeItem := Sender.items.getfirstnode else
        NodeItem := NodeItem.getfirstchild;
        //NodeItem is now the first item of the desired level
        //if this level has no items, NodeItem is nil  if (NodeItem <> nil) and (NodeItem.text <> Name) then
      Repeat
        NodeItem := NodeItem.getnextsibling;
      Until (NodeItem = nil) or (NodeItem.text = Name);
      Result := NodeItem;
    end;function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
    begin
      Result := TreeAddItem(Sender, Itemlist, nil, false);
    end;procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
    var
      Node, Parent: TTreeNode;
    begin
      Node := TreeGetItem(Sender, ItemList);
      while Node.level >= Level do
      begin
        Parent := Node.parent;
        Node.delete;
        if (Parent = nil) or (Parent.hasChildren) then break;
        Node := Parent;
      end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     i: integer;
     str: string;
    begin
      TreeView1.HideSelection := False;
      for i := 0 to ListBox1.Items.Count - 1 do
      begin
        if ListBox1.Selected[i] then
          str := ListBox1.Items.Strings[i];
      end;
      for i := 0 to TreeView1.Items.Count - 1 do
      begin
        if TreeView1.Items.Item[i].Text = str then
          TreeView1.Items.Item[i].Selected := True;
      end;
    end;
      

  3.   

    因我的Tree只是會找第1層,即是Tree中節點(aaa,bbb,ccc,ddd,eee...),所以我不希望循環所有的節點,
    所以,你們的代碼可否改一下
      

  4.   

    帮你改一下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     i: integer;
     str: string;
    begin
      TreeView1.HideSelection := False;
      for i := 0 to ListBox1.Items.Count - 1 do
        if ListBox1.Selected[i] then str := ListBox1.Items.Strings[i];
      for i := 0 to TreeView1.Items.Count - 1 do
        with TreeView1.Items.Item[i] do
          if (Level = 0) and (Text = str) then.Selected := True;
    end;