|
使用自定义函数作为组合框数据源
设 Combo.RowSourceType=GetList
RowSource 属性不填( 此时 RowSource 属性将被忽略 )
定义全程变量及函数如下:
public ListSource(100) as String
Function GetList(fld As Control, ID As Variant, row As Variant, col As Variant, code As Variant) As Variant
Static ListCount As Long
Dim i as Long
Select Case code
Case acLBInitialize ' 初始化。
For i = 0 To 99
If ListSource(i) = "" Then Exit For
Next i
GetList = IIf(i, True, False)
ListCount = i
Case acLBOpen ' 打开。
GetList = Timer ' 唯一 ID。
Case acLBGetRowCount ' 获取行。
GetList = ListCount
Case acLBGetColumnCount ' 获取列。
GetList = 1
Case acLBGetColumnWidth ' 获取列宽。
GetList = -1 ' 使用默认宽度。
Case acLBGetValue ' 获取数据。
GetList = ListSource(row)
End Select
End Function
上例定义了一个 容量 为 100 的字符串数组作为 Combo 的数据源.
在使用时可以灵活的通过对 数组数据的增删实现 Combo 的列表增删.(当然,得调用 Combo的Recalc方法)
上例中 ListSource 为一列,也可以设 ListSource 为多维数组,并适当的修改 Case acLBGetColumnCount 及 Case acLBGetValue 处的语句以实现多列.
其实,也可以通过设 RowSourceType 为 "值列表" 以实现此功能,但实现起来会有更多的限制(比如数组长度的限制)
如果使用表,则首先你得定义一个临时表.且对表的操作相信也没有对数组的操作那么自由. |
|