读书人

tlistview的tlistitem有data属性可以寄

发布时间: 2012-08-15 16:57:17 作者: rapoo

tlistview的tlistitem有data属性可以存放类吗?
怎么存放呢?

[解决办法]
存放类的指针,因为data的类型是指针
[解决办法]

Delphi(Pascal) code
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;
保存你自定义的类对象也行。
[解决办法]
可以的,把你要存放的数据强制类型转换成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 := '';
[解决办法]
可以的

使用的时候,在还原回原来的就行了

读书人网 >.NET

热点推荐