当前位置: 代码迷 >> PB >> pb listbox 动态更动展示信息序号
  详细解决方案

pb listbox 动态更动展示信息序号

热度:367   发布时间:2016-04-29 06:02:17.0
pb listbox 动态更改展示信息序号
有两个listbox用于展示信息,使用 lb_1.additem()插入数据,当选中一条记录时,可以将 lb_1中的内容放入到 lb_2,此时,lb_1中的内容需要重新编号,lb_2中的内容也需要重新编号,从1开始连续的编号。

我使用了以下代码,请问哪里不对?将数据信息 从lb_1中移动到lb_2时,会产生重复数据。请问高手如何处理。非常感谢。
string ls_selecteditem
string ls_itemlb1,ls_idlb1,ls_sclb1
string ls_itemlb2,ls_idlb2,ls_sclb2
long   ll_countlb1,ll_countlb2
integer li_ilb1,li_lenlb1,li_poslb1,li_ilb2,li_lenlb2,li_poslb2
ls_selecteditem = trim(lb_1.selecteditem()) //选中一条信息
if ls_selecteditem <> "" then
lb_2.additem(ls_selecteditem) //将lb_1中选中的信息插入到 lb_2 中
lb_1.deleteitem(lb_1.selectedindex())//从lb_1中删除插入到lb_2中的信息
ll_countlb2 = lb_2.totalitems()  //获取lb_2中的总数,用于循环重新编号
for li_ilb2 = 1 to ll_countlb2
ls_sclb2 = trim(lb_2.text(li_ilb2)) //从第一行开始获取信息
lb_2.deleteitem(li_ilb2 )  //删除获取的内容
li_lenlb2 = len(ls_sclb2)
li_poslb2 = Pos(ls_sclb2, "|", 1)
ls_itemlb2 = right(ls_sclb2, li_lenlb2 - li_poslb2)  //截取出 除编号以外的内容
if li_ilb2 < 10 then
ls_idlb2 = '0' + string(li_ilb2)
else
ls_idlb2 = string(li_ilb2)
end if

lb_2.additem(ls_idlb2 + "|" + ls_itemlb2) //重新编号后,插入
next
//lb_1 的处理方式与lb_2的处理方式一样
ll_countlb1 = lb_1.totalitems()
for li_ilb1 = 1 to ll_countlb1
ls_sclb1 = trim(lb_1.text(li_ilb1))
lb_1.deleteitem(li_ilb1 )
li_lenlb1 = len(ls_sclb1)
li_poslb1 = Pos(ls_sclb1, "|", 1)
ls_itemlb1 = right(ls_sclb1, li_lenlb1 - li_poslb1)
if li_ilb1 < 10 then
ls_idlb1 = '0' + string(li_ilb1)
else
ls_idlb1 = string(li_ilb1)
end if

lb_1.additem(ls_idlb1 + "|" + ls_itemlb1)
next
end if

我不知道是我使用ls_sclb2 = trim(lb_2.text(li_ilb2)) 这句话有问题,还是lb_2.deleteitem(li_ilb2 ) 有问题,当lb_1 与 lb_2 中的数据信息多移动几次,listbox框中展示的信息就会产生重复信息。


------解决方案--------------------
for 循环里的删除有问题,

你这里删除有问题,
for li_ilb2 = 1 to ll_countlb2
ls_sclb2 = trim(lb_2.text(li_ilb2)) //从第一行开始获取信息
lb_2.deleteitem(li_ilb2 )  //删除获取的内容
li_lenlb2 = len(ls_sclb2)
li_poslb2 = Pos(ls_sclb2, "
------解决方案--------------------
", 1)
ls_itemlb2 = right(ls_sclb2, li_lenlb2 - li_poslb2)  //截取出 除编号以外的内容
if li_ilb2 < 10 then
ls_idlb2 = '0' + string(li_ilb2)
else 
ls_idlb2 = string(li_ilb2)
end if

lb_2.additem(ls_idlb2 + "
------解决方案--------------------
" + ls_itemlb2) //重新编号后,插入
next

你删除了第一条后,原来的第二条就成了第一条,而li_ilb2又++,这时候你再删除就删除了原本的第3条,而原来的第2条由于变成了第1条,所以就没有删除掉。所以几次之后就有重复了


------解决方案--------------------
可以改为

long ll_count 
ll_count = 0
do while lb_2.totalitems()> 0
ls_sclb2 = trim(lb_2.text(1)) //从第一行开始获取信息
lb_2.deleteitem(1)  //删除获取的内容
ll_count ++
li_lenlb2 = len(ls_sclb2)
li_poslb2 = Pos(ls_sclb2, "
------解决方案--------------------
", 1)
ls_itemlb2 = right(ls_sclb2, li_lenlb2 - li_poslb2)  //截取出 除编号以外的内容
if ll_count < 10 then
ls_idlb2 = '0' + string(ll_count)
else 
ls_idlb2 = string(ll_count)
end if

lb_2.additem(ls_idlb2 + "
------解决方案--------------------
" + ls_itemlb2) //重新编号后,插入
loop
  相关解决方案