这是书上的一个例子,使用Listbox的ItemData属性作为进入另一个结构的序号。
假定已有一个产品名称和说明的列表:
type ProductUDT
Name as string
Description as string
Price as Currency
end type dim Products() as ProductUDT, i as long private sub form_load()
'从数据库中读产品信息到products(), 代码略。
'读产品名称到已设置排序的listbox:
for i=lbound(products) to ubound(products)
lstProducts.Additem Products(i).Name
'设置ItemData与products()的下标相对应:
lstProducts.ItemData(lstProducts.NewIndex)=i
next
end sub Private sub lstProducts_click()
'显示选定产品的说明及单价:
i=lstProducts.ItemData(lstProducts.ListIndex)
lblDescription.Caption=Products(i).Description
lblPrice.Caption=Products(i).Price
end sub
上面这段程序的功能应该很清楚了。实现也没有什么问题。看上去挺合理的。 而我现在的疑问是,产品的记录集可能会变化的,比如经过几次增加与删除之后,lstProducts.itemdata的值就可能不连续了,与数组的下标怎么保持对应呢?
记录集的每次删除动作,都跟一个重新填写products()数组和lstproducts列表的动作吗?不太好吧?
如果不用数组改用集合来存放产品信息,那么,删除产品时好处理一点,新增产品时,itemdata不太好确定了,要遍历每项itemdata的值,找出最大的,再加一?感觉效率上不是很好。不考虑用产品名作为itemdata的值。因为记录集不一定是产品记录,可能是别的,第一列不一定是主键或唯一记录。 大家看看有没有什么好的点子? 谢谢回复。
解决方案 »
- 请教一个vb中对象声明的问题
- 请教如何把一段VB源代码保护起来?
- 请问各位怎么样用vb实现像C里的结构体呀
- 怎样将一个数字转换成一个具有固定字符数的16进制字符串
- ADO连接远程mssql出现错误430,求助!
- 急问:调用一个.exe程序后,如何自动点击该程序工具条上的按钮.
- 請教playyuer及各位~~!
- 当text.multline=true时????gg
- Rational Rose Enterprise Edition v2001.03.00.271 下载 (www.playyuer.com 提供 URL)
- 一个可以陪你聊天的机器人,可惜它只会说英文。源码!
- ***怎样用编程实现休眠和待机***
- 一个扩展MSHFLEXGRID控件的控件
i不是从0开始,你怎么处理