表T1类别  商品名  商品编号
aa    1111    010001
aa    1111    010002
bb    2222    020001Treeview添加后样式-aa
    1111
    1111-bb
    2222请问如何在点击Treeview二级节点时,显示该节点的商品编号呢,假如第一个1111的商品编号是010001,请问该如何添加点击时才能判断出选择的是哪个商品编号的商品名?知道的告诉一下,谢谢
 

解决方案 »

  1.   

    treeview节点Node.Data,这个可以存储指针,你可以定义一个record,里面包含你想要的信息,然后分配指针保存到Node.Data中,因为是字符串,最好不要直接保存,因为存在生命周期的问题,整形可以直接保存
      

  2.   

    可利用TreeView.Items[i].Data指针关联一个结构体或类,存放扩展信息
      

  3.   

    参考一下这个
    不过这里没有放扩展信息,略变一下
    NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
    后面加上
    NewNode.Data := arrInfo[k];
    不过我这里动态数组arrInfo是一次性初始化的,也可以在循环里用到再初始化根据你的情况再改一下就差不多了
      

  4.   

    参考代码unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls, Buttons, ComCtrls;
    type
      tmx=packed record
        bh:array[0..10] of string;
        mc:array[0..10] of string;
    end;
    pmx=^tmx;//添加节点
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      p:pmx;
      tn:TTreeNode;
    begin
      new(p);
      p.bh[0]:='010001';
      p.mc[0]:='1111';
      p.bh[1]:='010002';
      p.mc[1]:='1111';
      //self.TreeView1.Items[0].Data:=p;
      self.TreeView1.Items.Clear;
      tn:=self.TreeView1.Items.Add(nil,'1');
      self.TreeView1.Items.AddChildObject(tn,'123',p);//123就是
      self.TreeView1.Items.AddChildObject(tn,'123',p);//123就是
    end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      tn:TTreeNode;
      s1,s2:string;
      i:Integer;
    begin
      tn:=self.TreeView1.GetNodeAt(x,y);
      if tn=nil then
        Exit;
      if tn.Parent=nil then
        Exit;
      i:=tn.Index;
      s1:=pmx(tn.Data).bh[i];
      s2:=pmx(tn.Data).mc[i];
      self.Label1.Caption:=s1;
      self.Label2.Caption:=s2;
    end;
      

  5.   

    上面的代码运行不了,是不是这哪写错了type
      tmx=packed record
        bh:array[0..10] of string;
        mc:array[0..10] of string;
    end;
      

  6.   

    兄弟,我上面的代码是节选的,不全,你不会直接就复制粘贴到你的unit里了吧
      

  7.   

    完整代码unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls, Buttons, ComCtrls;
    type
      tmx=packed record
        bh:array[0..10] of string;
        mc:array[0..10] of string;
    end;
    pmx=^tmx;
    type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        TreeView1: TTreeView;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        Label1: TLabel;
        Label2: TLabel;
        procedure FormShow(Sender: TObject);
        procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
        procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
        procedure BitBtn1Click(Sender: TObject);
        procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
        vg_flag:Integer;
        vg_row,vg_col:Integer;
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    //添加节点
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      p:pmx;
      tn:TTreeNode;
    begin
      new(p);
      p.bh[0]:='010001';
      p.mc[0]:='1111';
      p.bh[1]:='010002';
      p.mc[1]:='1111';
      //self.TreeView1.Items[0].Data:=p;
      self.TreeView1.Items.Clear;
      tn:=self.TreeView1.Items.Add(nil,'1');
      self.TreeView1.Items.AddChildObject(tn,'123',p);//123就是
      self.TreeView1.Items.AddChildObject(tn,'123',p);//123就是
    end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      tn:TTreeNode;
      s1,s2:string;
      i:Integer;
    begin
      tn:=self.TreeView1.GetNodeAt(x,y);
      if tn=nil then
        Exit;
      if tn.Parent=nil then
        Exit;
      i:=tn.Index;
      s1:=pmx(tn.Data).bh[i];
      s2:=pmx(tn.Data).mc[i];
      self.Label1.Caption:=s1;
      self.Label2.Caption:=s2;
    end;