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
)与问题/代码(错误使用不正确的控件名称)?链接无效。