visual basic argument null exception

时间:2013-03-30 20:26:36

标签: vb.net exception null arguments

我即将承认失败,我对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

2 个答案:

答案 0 :(得分:3)

你的问题在于FindComs方法 第一个循环在USBCollection中搜索包含字母P的设备,并计算它们 在第二个循环中,在使用找到的设备数量确定返回数组的大小后,尝试使用包含字符串COM的设备填充此数组,当然,具有COM和{的设备之间没有任何关系{1}}以他们的名义。您最终得到的数组大于名称中P的有效设备数。

当数组返回时,你添加了数组的每个插槽,但你有插槽有NULL值,因而错误 您可以修复仅针对名称中包含COM的设备标注数组的问题

COM

答案 1 :(得分:2)

Oded的评论是造成这种失败的最可能原因。

一个简单的测试是将Name属性设置为某个默认字符串,例如comdevice类中的“test”。

这样,Name属性将永远不会为null,您可以看到它是否会被更改。