为什么读取listview控件的item.data时出错?????????(0分)

  • 主题发起人 主题发起人 autocar
  • 开始时间 开始时间
A

autocar

Unregistered / Unconfirmed
GUEST, unregistred user!
我想为每个item储存额外的字符信息

我的代码如下:

var
ps:^string;

....
. ....
. ....


begin
new(ps);

//指针赋值
ps^:='hi';

Listitem:=lv1.Items.Add;

Listitem.Caption:='yuxin';
//向data属性赋值
Listitem.Data:=ps;

------------------------------读取----------------------------------------------
//选中上面代码创建的item,并读取data属性

label6.Caption:=string(lv1.Selected.Data ) ;

--------------------------------------

但在读取 lv1.Selected.Data 不能正确读取'hi'字符串,读出来的是很怪的字符



请各位高手帮忙解决谢谢!!!
 
label6.Caption:=string(lv1.Selected.Data);
应该改为 lv1.Selected.value 试试~~~
注意,如果你listveiw 有几列
那么第一列的植应该是 lv1.Selected.caption ;
其他 几列就是上面的 lv1.Selected.value ;
 
label6.Caption:=string(lv1.Selected.Data ) ;
写错了,应该是:
label6.Caption:=string(lv1.Selected.Data^) ;
不过最好用
listitem.subitems好些
 
错,应该用lv1.Items.AddObject什么的
这样后面才有要传入data指针的
 
呵呵,上面的看错了,当成treeview,给你看看我 一段代码
var
f_ProClass:integer;
aList:TListItem;
begin
//获得选择节点的ID,即工程类型
f_ProClass:=integer(aNode.Data);
rs:=conn.execute('select * from tProject where fClass='+inttostr(f_ProClass));
//rs.MoveFirst;
bsProjectList.Clear;
bsProjectList.Items.BeginUpdate;
while not rs.Eof do
begin
aList:=bsProjectList.Items.Add;
alist.Caption:=vartostr(rs.Fields.Item['fproName'].Value);
aList.SubItems.Add(vartostr(rs.Fields.Item['fKeyword'].Value));
aList.SubItems.Add(vartostr(rs.Fields.item['fproNote'].value));
aList.Data:=pointer(integer(Rs.Fields.Item['fProid'].value));
application.ProcessMessages;
Rs.MoveNext;
end;
bsProjectList.Items.EndUpdate;
rs.close;
 
delphi的TTreeView TListView的data都是Pointer类型
取出来的话一定要复制给pointer类型的
eg:type PInteger = ^Integer;
nTest: PInteger;
nTest := PInteger(ListView.Items[].Data);
 

Similar threads

后退
顶部