在combobox的items中可否也能象TREEVIEW中的DATA一样保存额外的数据?(100分)

  • 主题发起人 主题发起人 jysoft
  • 开始时间 开始时间
J

jysoft

Unregistered / Unconfirmed
GUEST, unregistred user!
一个数据库中的两个字段A1,A2,其中A1填充COMBOBOX,如果我要在COMBOBOX中每选取一
值后,相应读取A2字段的值,这个过程可以在COMBOBOX的ONCHANGE中定位实现,但我若想
不用ONCHANGE,直接读取ITEMS的额外数据(在填充COMBOBOX时加上A2字段的数据。)
 
<<ITEMS的额外数据
不行。Combobox.items: TStrings;
而TreeNode.data : Pointer; 所以可以保存额外信息。
 
cmmbobox.items.addobjects.
可以的任何对象都行的
 
to xianghb
我也想过这个情况,但找不到实例,不知如何做?
能给个实例吗?
 
var
dbname,tbname:string;
tb:ttable;
i:integer;
begin
dbname:=form1.Table1.DatabaseName;
tbname:=form1.OpenDialog1.FileName;
tb:=ttable.create(self);
tb.DatabaseName:=dbname;
tb.TableName:=tbname;
tb.Open;
for i:=0 to tb.FieldCount-1 do
form2.combobox1.Items.Add(tb.Fields.FieldName);//相应的换成你要读的第二个数据就可以了;
tb.Close;
tb.Free;
 
查addobject的帮助里面有例子
 
//保存
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.Clear;
ComboBox1.Items.AddObject('范例',TObject(10));
end;
//读取
procedure TForm1.Button2Click(Sender: TObject);
begin
Button2.Caption:=IntToStr(integer(ComboBox1.Items.Objects[0]));
end;
 
type
pUserinfo=^Tuserinfo;
TUserinfo=record
ID:string;
name:string;
end ;
...................................
procedure TForm1.Button1Click(Sender: TObject);
var P:pUserinfo;
begin
with combobox1 do begin
items.clear;
new(p);
p.ID:='001';
p.name:='xiang';
items.AddObject(p.ID,TObject(P)); //写记录 即A1
showmessage(pUserinfo(items.Objects[0])^.name);//读记录 即A2
end;
end;
 
同意楼上
 
to xianghb
我试过你的方法了,还真可以,现再有一个问题:一般都说用NEW()申请的内存,
最后要用DISPOS() 释放,那你这个应在哪个地方释放呢?是在FORM1。CLOSE?
可出错啊!!
 
完整一些的东东儿应该是
.........
try

new(p);
................
finally
dispose(p);
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部