Combobox 如何将组合框itemdata作为字符串值输入到visual basic 6.0中
这是代码示例:Combobox 如何将组合框itemdata作为字符串值输入到visual basic 6.0中,combobox,vb6,Combobox,Vb6,这是代码示例: Set rs = Nothing Set rs = New ADODB.Recordset qry = "select maincategoryid,MCategoryName from mainCATEGORY" rs.Open qry, Cn, adOpenDynamic, adLockReadOnly If rs.EOF = False Then Do Until rs.EOF maincatddl.AddItem rs!MCategoryName,
Set rs = Nothing
Set rs = New ADODB.Recordset
qry = "select maincategoryid,MCategoryName from mainCATEGORY"
rs.Open qry, Cn, adOpenDynamic, adLockReadOnly
If rs.EOF = False Then
Do Until rs.EOF
maincatddl.AddItem rs!MCategoryName, Val(rs!maincategoryid)
catddl.ItemData(catddl.NewIndex) = Val(rs!maincategoryid)
rs.MoveNext
Loop
End If
它给了我“错误无效属性数组索引”。我有字符串类型的主类别id。不能直接使用。但是,您可以创建一个数组来保存字符串,组合框中所选项目的ListIndex将与字符串的索引相对应
Dim MainCatStrings() As String
Dim CurrIndex as long
CurrIndex = 0
Set rs = Nothing
Set rs = New ADODB.Recordset
qry = "select maincategoryid,MCategoryName from mainCATEGORY"
rs.Open qry, Cn, adOpenDynamic, adLockReadOnly
'ReDim the array to set equal to record count
ReDim MainCatStrings(rs.RecordCount)
If rs.EOF = False Then
Do Until rs.EOF
maincatddl.AddItem rs!MCategoryName
'Add the category ID to the string array
MainCatStrings(CurrIndex) = rs!maincategoryid
'Set the item data to the index value in string array
catddl.ItemData(catddl.NewIndex) = CurrIndex
CurrIndex = CurrIndex + 1
rs.MoveNext
Loop
End If
希望这有助于解决一些问题。首先,这段代码的可重用性不是很强,因为您试图将记录集的内容添加到组合框中,但是如果您想再次运行这段代码,会得到大量重复的代码。所以实际上,您需要清除组合框的内容,例如。
maincaddl.Clear
Set rs = Nothing
Set rs = New ADODB.Recordset
qry = "select maincategoryid,MCategoryName from mainCATEGORY"
rs.Open qry, Cn, adOpenDynamic, adLockReadOnly
If rs.EOF = False Then
Do Until rs.EOF
。。。但是哪一个呢?通常,当您看到。AddItem()
时,下一行是。ItemData
(.NewIndex
)。但是您有两个不同的名称:,maincatddl
和catddl
maincatddl.AddItem rs!MCategoryName, Val(rs!maincategoryid)
catddl.ItemData(catddl.NewIndex) = Val(rs!maincategoryid)
概率的平衡是,您希望第二行使用maincatddl
。显然,您误解了AddItem()
方法的第二个参数Index
。看起来好像您认为这是用户定义的整数,就像ItemData()
属性的值一样。但是Index
实际上是您希望新项目出现在列表中的位置。假设索引
在范围(0到.ListCount)内,它似乎可以工作
除非您希望项目按特定顺序显示,否则此行应改为:
maincatddl.AddItem rs!McCategoryName
maincatddl.ItemData(maincatddl.NewIndex)=Val(rs!maincategoryid)
顺便说一句,如果您使用了很多遵循这种模式的线对,我建议您编写一个过程来封装这种行为
rs.MoveNext
Loop
End If
通常情况下,ComboBox和ListBox的ItemData只能是长正数或0。 添加其他类型的ItemData的最简单方法是使用Collection。 在下面的示例中,ComboBox和ListBox的ItemData可以有以下类型: 长负片、字符串、任何VB6控件(图像作为示例)、VB6的任何对象(表单作为示例)。 我建议使用VB6的控件。我在公司里用了很多年
ListBox和ComboBox的ItemData和标记属性都是变量,它们支持字符串和对象。catddl应该是maincatddl吗?只是它没有显示使用AddItem调用catddl的位置,因此我认为您不会有新的索引可供使用。标题(添加字符串作为
ItemData
)与问题/代码(错误使用不正确的控件名称)?链接无效。