我即将承认失败,我对VB很陌生,我确信有一些非常基本的东西我已经错过了,
我的以下代码的问题是当执行Button3_Click函数时,“值不能为null。参数名:item”异常在运行时出现,如果我忘记在此行中包含“.Name”“ListBox2 .Items.Add(test.Name)“然后东西仍然被呕吐到列表框中,所以假设那里有东西,
任何帮助?
此致 丹
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles
Button3.Click
Dim test As comdevice
Dim usbcoms() As comdevice = FindComs()
For Each test In usbcoms
ListBox2.Items.Add(test.Name)
Next
End Sub
Private Function FindComs() As comdevice()
Dim USBClass As New System.Management.ManagementClass("Win32_PNPEntity")
Dim USBCollection As System.Management.ManagementObjectCollection =
USBClass.GetInstances()
Dim USB As System.Management.ManagementObject
Dim temp() As comdevice
Dim n As Integer
n = 0
For Each USB In USBCollection
If USB("Name").ToString().Contains("P") Then
n += 1
End If
Next USB
ReDim temp(n)
n = 0
For Each USB In USBCollection
If USB("Name").ToString().Contains("COM") Then
temp(n).Name = USB("Name").ToString()
temp(n).DeviceID = USB("DeviceID").ToString()
End If
Next
Return temp
End Function
Private Structure comdevice
Public Name As String ' This employee's given name.
Public DeviceID As String ' This employee's family name.
End Structure
答案 0 :(得分:3)
你的问题在于FindComs方法
第一个循环在USBCollection中搜索包含字母P
的设备,并计算它们
在第二个循环中,在使用找到的设备数量确定返回数组的大小后,尝试使用包含字符串COM
的设备填充此数组,当然,具有COM
和{的设备之间没有任何关系{1}}以他们的名义。您最终得到的数组大于名称中P
的有效设备数。
当数组返回时,你添加了数组的每个插槽,但你有插槽有NULL值,因而错误
您可以修复仅针对名称中包含COM
的设备标注数组的问题
COM
答案 1 :(得分:2)
Oded的评论是造成这种失败的最可能原因。
一个简单的测试是将Name
属性设置为某个默认字符串,例如comdevice
类中的“test”。
这样,Name
属性将永远不会为null,您可以看到它是否会被更改。