vb6当For Each循环如何我可以分配变量

时间:2013-03-03 07:39:41

标签: for-loop vb6 var

我遇到的问题是我在VB 6中请求调制解调器名称的WMI查询&端口

我有一个FOR EACH LOOP,每个都有超过1个值(2个端口显示,所以每个都有2个值)。如何分配变量以便将其分配给Label或TextBox?

我想要一个VB 6代码示例,说明如何通过循环分配变量以及如何调用变量?

这是我的代码(当我使用MsgBox时我可以看到它,它只是单独弹出两次,但我想要变量,所以我可以分配它们)

For Each objItem In colItems
    MsgBox ("Test -" & objItem.Name)
Next

我尝试了这个,我得到一个号码,但我不知道如何引用它

For Each objItem In colItems
    Dim myCount
    myCount = myCount + 1

    Debug.Print objItem.Name & myCount  '** i just tested with Debug.Print
Next

Form1.TextBox1.Text = myCount(1)  '** THIS DOES NOT WORK
Form1.TextBox2.Text = myCount(2)

如何指定objItem.Name(它会带回2个不同的对象)?这就是我得到的:

1SAMSUNG Mobile Modem #2
2SAMSUNG Mobile Modem Diagnostic Serial Port (WDM) (COM1)

(1& 2来自myCount)

不使用myCount,我只想为每个值分配自己的变量。

3 个答案:

答案 0 :(得分:1)

假设你有100个或更少的对象,每个对象有2个值,这里有一种方法将一对值存储到一个二维数组中:

Dim myVar(100,2) As String
Dim myCount as Integer
myCount = 0
For Each objItem In colItems
    If myCount Mod 2 = 0 Then     
        'read the first value
        myVar(myCount,1) = objItem.Name
    Else
        'read the second value then move to the next object
        myVar(myCount,2) = objItem.Name
        myCount = myCount + 1      
    End If
Next

'Now if you want to print the value of the fifth object:
MsgBox("(Object #5) has first value: " & myVar(5,1) )
MsgBox("And the second value is: " & myVar(5,2) )

答案 1 :(得分:0)

根据您的描述,我假设.Name属性包含您想要单独存储的几个字段?

我不知道.Name中的字段是如何分开的,所以在下面的示例中我只考虑它们以空格分隔:

Option Explicit

Private Type ModemData
  strField() As String
End Type

Private mudtModems() As ModemData

Private Sub ReadModems()
  Dim intCount As Integer
  Dim strName As String
  ReDim mudtModems(31) As ModemData
  intCount = 0
  For Each objItem In colItems
    strName = objItem.Name
    mudtModems(intCount).strField = Split(strName, " ")
    intCount = intCount + 1
  Next
  ReDim Preserve mudtModems(intCount - 1) As ModemData
End Sub

最初它创建一个数组来容纳32个调制解调器,最后将数组重新调整为实际大小

每个udtModem中的strField数组将具有不同的长度,具体取决于.Name中的字段数

您可能需要另一个例程来正确分割.Name的字段,使用该例程代替Split(strName, " ")

答案 2 :(得分:0)

实际上,您已将数据存储在变量中。该变量名为colItems。 colItems是Collection类型的变量。 You can read more about collections on MSDN.

如果您知道您的收藏包含2件商品且您的收藏品是1件,则可以使用您的收藏品:

myTextbox1.Text = colItems(1).Name
myTextbox2.Text = colItems(2).Name

或者,如果要将它们分配给变量:

Dim myString1 as String
Dim myString2 as String

myString1 = colItems(1).Name
myString2 = colItems(2).Name

困难的部分是您很少知道您的收藏将包含多少项目。通常,您正在使用的API的开发人员会为您提供一个集合,因为无法知道该函数将返回多少元素。在这种情况下,收藏是一个很好的选择。

当一个集合作为函数的返回值给出时,将它显示在几个文本框中很少是处理数据的充分方法。某种列表框通常更适合。如果有充分的理由使用Textbox,那么文本框的控件数组是一种可能的解决方案。