我遇到的问题是我在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,我只想为每个值分配自己的变量。
答案 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,那么文本框的控件数组是一种可能的解决方案。