代码如下:
  TNodeObject   =   class(TObject)
    Id        :integer;
    Name      :string;
    company   :string;
    deparment :string;
  end;procedure TForm1.Button1Click(Sender: TObject);
var
  cur_node,Root:TTreeNode;
begin
  Root := TreeView1.Items.AddChild(nil,'主目录');
  with adoquery1 do
  begin
    if active then
      close;
    sql.Text := 'select * from T_ITEM order by itemid';
    Open;
    First;
    while not Eof do
    begin
      NodeObject := TNodeObject.Create;
      NodeObject.Name := Trim(fieldbyname('ITEMNAME').AsString) ;
      NodeObject.company := Trim(IntToStr(fieldbyname('ITEMID').AsInteger));
      NodeObject.Id := fieldbyname('ITEMIDENTITY').AsInteger;
      cur_node.Data := NodeObject;
      cur_node := TreeView1.Items.AddChild(Root,NodeObject.Name);
      Next;
    end;
  end;
end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  try
    if Node<>nil then
    begin
      Edit1.Text := TNodeObject(node.data).Name;
      Edit2.Text := TNodeObject(node.data).company;
      Edit3.Text := IntToStr(TNodeObject(node.data).Id);
    end;
  except  end;
end;
我现在的问题是在选择不同节点的时候,发现数据固定在最后一条数据,并没有根据焦点选择的节点切换数据。却不知道问题发生在那里,各位麻烦给看看致电一下

解决方案 »

  1.   

    if (Not <> Nil) and Node.Selected then begin
      Edit1.Text := ..........
      ........
    end;
      

  2.   

    if (Node <> Nil) and Node.Selected then begin
      Edit1.Text := ..........
      ........
    end;
      

  3.   

    不行,测试了还是指向最后一条记录没有指向绑定的data
      

  4.   

    在TreeView1CustomDrawItem事件中指定Node.Data := New(TNodeObject);
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
    type
      PObjectNode = ^TObjectNode;
      TObjectNode = Record
        Name:string;
        value:string;
      end;
    type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        procedure FormShow(Sender: TObject);
        procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Math;{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
    var
      i:integer;
      Root:TTreeNode ;
      Obj:PObjectNode ;
    begin
      Root := Treeview1.Items.AddChild(nil,'Root');  for i := 0 to 20 do
      begin
        new(Obj);
        obj.Name := IntToStr(i) + 'Name';
        obj.value := IntToStr(i);
        TreeView1.Items.AddChildObject(Root,IntTostr(i),obj);
      end;
    end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Node.Level = 1 then
      begin
        Edit1.Text := PObjectNode(Node.Data)^.Name ;
        Edit2.Text := PObjectNode(Node.Data)^.value ;
      end;
    end;end.