0

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

我有一个 FOR EACH 循环,每个循环有超过 1 个值(显示 2 个端口,所以每个循环有 2 个值)。如何分配变量以便将其分配给标签或文本框?

我想要一个如何通过循环分配变量以及如何调用变量的 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 的情况下,我只想为每个值分配自己的变量。

4

3 回答 3

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) )
于 2013-03-03T13:18:06.653 回答
0

实际上,您已经将数据保存在变量中。该变量名为 colItems。colItems 是 Collection 类型的变量。 您可以在 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 的开发人员会给您一个集合,因为无法知道该函数将返回多少元素。在这种情况下,集合非常适合。

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

于 2013-03-04T09:15:09.520 回答
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, " ")

于 2013-03-04T06:40:36.140 回答