tlistview的tlistitem有data属性可以存放类吗? 怎么存放呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 存放类的指针,因为data的类型是指针 procedure TForm1.Button1Click(Sender: TObject);var a:test;begin a:=test.Create; a.a := '1'; listview1.Items.Add.Data := Pointer(a); ListView1.Items[0].Data := Pointer(a);end;procedure TForm1.Button2Click(Sender: TObject);var b:test;begin b:=test.Create; b:= ListView1.Items[0].Data; ShowMessage(b.a);end;随便写了点 可以的,你的意思是存放对象吧。无论自定义的类对象还是什么都可以的,直接赋值就行,看下面例子procedure TForm1.FormCreate(Sender: TObject);var edt: TEdit; item:TListItem;begin edt:= TEdit.Create(Self); edt.Text := '123'; item := lv1.Items.Add; item.Data := edt; item.Caption := edt.Textend;取的时候转化一下data就行。看下面例子procedure TForm1.btn1Click(Sender: TObject);var edt: TEdit;begin edt := TEdit(lv1.Items.Item[0].Data); ShowMessage(edt.Text);end;保存你自定义的类对象也行。 可以的,把你要存放的数据强制类型转换成Pointer即可在使用时,再转换成实际的类型就行了 item的data是指针,你可以用它保存,比如你有一个record的指针 Pxxx,可以将它保存到data中,然后读取时Pxxx(item.data).xxxx 可以的,而且也很实用,以下是之前写的相关代码,中间用到了循环,看看有没有参考的地方frmObjCYFKF.lvCYFKF.Items.Clear; frmObjCYFKF.lvCYFKF.Items.BeginUpdate; try qryFKF.First; while not qryFKF.Eof do begin tCYFKF := TT_CS_USER.Create; with tCYFKF do begin OID := qryFKF.FieldByName('OID').AsString; USERNAME := qryFKF.FieldByName('USERNAME').AsString; ACCOUNTNO := qryFKF.FieldByName('ACCOUNTNO').AsString; LINKMAN := qryFKF.FieldByName('LINKMAN').AsString; PINYINCODE := qryFKF.FieldByName('PINYINCODE').AsString; OPENBANK := qryFKF.FieldByName('OPENBANK').AsString; PHONE := qryFKF.FieldByName('PHONE').AsString; CODE := qryFKF.FieldByName('CODE').AsString; ADDRESS := qryFKF.FieldByName('ADDRESS').AsString; NSRBM := qryFKF.FieldByName('NSRBM').AsString; KPD_ID := qryFKF.FieldByName('KPD_ID').AsString; end; with frmObjCYFKF.lvCYFKF.Items.Add do begin Data := tCYFKF; Caption := tCYFKF.CODE; SubItems.Add(tCYFKF.USERNAME); SubItems.Add(tCYFKF.PINYINCODE); SubItems.Add(tCYFKF.OPENBANK); SubItems.Add(tCYFKF.ACCOUNTNO); SubItems.Add(tCYFKF.LINKMAN); SubItems.Add(tCYFKF.PHONE); SubItems.Add(tCYFKF.ADDRESS); end; qryFKF.Next; end; finally frmObjCYFKF.lvCYFKF.Items.EndUpdate; end;反向读取: if not Assigned(fcs_USER) then fcs_USER := TT_CS_USER.Create; if not ((lvCYFKF.Selected = nil) or (lvCYFKF.Selected.Data = nil)) then begin with fcs_USER, lvCYFKF do begin OID := TT_CS_USER(Selected.Data).OID; USERNAME := TT_CS_USER(Selected.Data).USERNAME; ACCOUNTNO := TT_CS_USER(Selected.Data).ACCOUNTNO; LINKMAN := TT_CS_USER(Selected.Data).LINKMAN; PINYINCODE := TT_CS_USER(Selected.Data).PINYINCODE; OPENBANK := TT_CS_USER(Selected.Data).OPENBANK; PHONE := TT_CS_USER(Selected.Data).PHONE; CODE := TT_CS_USER(Selected.Data).CODE; ADDRESS := TT_CS_USER(Selected.Data).ADDRESS; NSRBM := TT_CS_USER(Selected.Data).NSRBM; end; end else fcs_USER.CODE := ''; 【delphi5 Edit 显示小数的问题!!!】 如何在DELPHI7中实现CAD那样的画线?? 函数 如何取得ftp上文件最修改日期? 测试数据库 有什么办法让报表preview之后自动关闭? 请教各位一个问题! Error creating form:Access violation at address 40003c4c in module 'vcl50.bpl'.Read of address 4874656c. 小弟遇到一个问题, 怎样在注册表中新建一个REG_MULTI_SZ类型的值? Delphi中流的ReadBuffer和Read什么区别? cxgrid 合并单元格
procedure TForm1.Button1Click(Sender: TObject);
var
a:test;
begin
a:=test.Create;
a.a := '1';
listview1.Items.Add.Data := Pointer(a);
ListView1.Items[0].Data := Pointer(a);
end;procedure TForm1.Button2Click(Sender: TObject);
var
b:test;
begin
b:=test.Create;
b:= ListView1.Items[0].Data;
ShowMessage(b.a);
end;随便写了点
procedure TForm1.FormCreate(Sender: TObject);
var
edt: TEdit;
item:TListItem;
begin
edt:= TEdit.Create(Self);
edt.Text := '123';
item := lv1.Items.Add;
item.Data := edt;
item.Caption := edt.Text
end;
取的时候转化一下data就行。看下面例子
procedure TForm1.btn1Click(Sender: TObject);
var
edt: TEdit;
begin
edt := TEdit(lv1.Items.Item[0].Data);
ShowMessage(edt.Text);
end;
保存你自定义的类对象也行。
在使用时,再转换成实际的类型就行了
frmObjCYFKF.lvCYFKF.Items.Clear;
frmObjCYFKF.lvCYFKF.Items.BeginUpdate;
try
qryFKF.First;
while not qryFKF.Eof do
begin
tCYFKF := TT_CS_USER.Create;
with tCYFKF do
begin
OID := qryFKF.FieldByName('OID').AsString;
USERNAME := qryFKF.FieldByName('USERNAME').AsString;
ACCOUNTNO := qryFKF.FieldByName('ACCOUNTNO').AsString;
LINKMAN := qryFKF.FieldByName('LINKMAN').AsString;
PINYINCODE := qryFKF.FieldByName('PINYINCODE').AsString;
OPENBANK := qryFKF.FieldByName('OPENBANK').AsString;
PHONE := qryFKF.FieldByName('PHONE').AsString;
CODE := qryFKF.FieldByName('CODE').AsString;
ADDRESS := qryFKF.FieldByName('ADDRESS').AsString;
NSRBM := qryFKF.FieldByName('NSRBM').AsString;
KPD_ID := qryFKF.FieldByName('KPD_ID').AsString;
end; with frmObjCYFKF.lvCYFKF.Items.Add do
begin
Data := tCYFKF;
Caption := tCYFKF.CODE;
SubItems.Add(tCYFKF.USERNAME);
SubItems.Add(tCYFKF.PINYINCODE);
SubItems.Add(tCYFKF.OPENBANK);
SubItems.Add(tCYFKF.ACCOUNTNO);
SubItems.Add(tCYFKF.LINKMAN);
SubItems.Add(tCYFKF.PHONE);
SubItems.Add(tCYFKF.ADDRESS);
end; qryFKF.Next;
end; finally
frmObjCYFKF.lvCYFKF.Items.EndUpdate;
end;反向读取:
if not Assigned(fcs_USER) then
fcs_USER := TT_CS_USER.Create; if not ((lvCYFKF.Selected = nil) or (lvCYFKF.Selected.Data = nil)) then
begin
with fcs_USER, lvCYFKF do
begin
OID := TT_CS_USER(Selected.Data).OID;
USERNAME := TT_CS_USER(Selected.Data).USERNAME;
ACCOUNTNO := TT_CS_USER(Selected.Data).ACCOUNTNO;
LINKMAN := TT_CS_USER(Selected.Data).LINKMAN;
PINYINCODE := TT_CS_USER(Selected.Data).PINYINCODE;
OPENBANK := TT_CS_USER(Selected.Data).OPENBANK;
PHONE := TT_CS_USER(Selected.Data).PHONE;
CODE := TT_CS_USER(Selected.Data).CODE;
ADDRESS := TT_CS_USER(Selected.Data).ADDRESS;
NSRBM := TT_CS_USER(Selected.Data).NSRBM;
end;
end
else
fcs_USER.CODE := '';