▲▲▲请看一下,简单TreeView 使用问题▲▲▲ 表T1类别 商品名 商品编号aa 1111 010001aa 1111 010002bb 2222 020001Treeview添加后样式-aa 1111 1111-bb 2222请问如何在点击Treeview二级节点时,显示该节点的商品编号呢,假如第一个1111的商品编号是010001,请问该如何添加点击时才能判断出选择的是哪个商品编号的商品名?知道的告诉一下,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 treeview节点Node.Data,这个可以存储指针,你可以定义一个record,里面包含你想要的信息,然后分配指针保存到Node.Data中,因为是字符串,最好不要直接保存,因为存在生命周期的问题,整形可以直接保存 可利用TreeView.Items[i].Data指针关联一个结构体或类,存放扩展信息 参考一下这个不过这里没有放扩展信息,略变一下NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);后面加上NewNode.Data := arrInfo[k];不过我这里动态数组arrInfo是一次性初始化的,也可以在循环里用到再初始化根据你的情况再改一下就差不多了 参考代码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; 上面的代码运行不了,是不是这哪写错了type tmx=packed record bh:array[0..10] of string; mc:array[0..10] of string;end; 兄弟,我上面的代码是节选的,不全,你不会直接就复制粘贴到你的unit里了吧 完整代码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; delphi如何自动关闭异常的对话框 谁能告诉我,那里有有关的delphi毕业论文下! <<燎原协同办公系统>>开发源代码 如何在Clear之后,完全释放Listview的Items的内存? 请问 制定意一个函数 如何返回两个以上的值? 运行时出错问题! 谁有《Object Pascal 编程指南 》书?在线等待! 有几个问题请教高手? 通用查询功能 请宁波的朋友,留个QQ,以便大家一起交流.来者有分 如何知道stringGrid某一个单元格的状态? 关于读取TXT
不过这里没有放扩展信息,略变一下
NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
后面加上
NewNode.Data := arrInfo[k];
不过我这里动态数组arrInfo是一次性初始化的,也可以在循环里用到再初始化根据你的情况再改一下就差不多了
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;
tmx=packed record
bh:array[0..10] of string;
mc:array[0..10] of string;
end;
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;