【问题标题】:visual basic argument null exception视觉基本参数空异常
【发布时间】:2013-03-21 07:51:55
【问题描述】:

我即将承认失败,我对 VB 还很陌生,我确信我已经设法错过了一些非常基本的东西,

以下代码的问题是,当执行 Button3_Click 函数时,如果我忘记在“ListBox2”这一行包含“.Name”,则在运行时会出现“值不能为空。参数名称:项目”异常.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

【问题讨论】:

  • ListBox2 在哪里声明?它曾经被分配到吗?
  • 它在主窗体中,它以任何方式获取数据,而不是这种情况
  • 或者根本没有,可能。如果ListBox2 没有被分配或者如果它被分配了null,你会得到这个错误。与 usbcomName 属性相同 - 它可能是 null

标签: vb.net exception null arguments


【解决方案1】:

您的问题在于 FindComs 方法。
第一个循环在 USBCollection 中搜索包含字母 P 的设备,然后计算它们。
在第二个循环中,在使用找到的设备数量确定返回数组的维度后,您尝试使用包含字符串 COM 的设备填充此数组,当然,COMP 的设备之间没有关系姓名。您最终得到的数组大于名称中带有COM 的设备的有效数量。

当数组返回时,您添加了数组的每个槽,但槽的值为 NULL,因此会出现错误。
您可以仅针对名称中带有 COM 的设备解决阵列尺寸问题

For Each USB In USBCollection
    If USB("Name").ToString().Contains("COM") Then
        n += 1
    End If
Next USB
ReDim temp(n)

【讨论】:

    【解决方案2】:

    Oded 的评论最有可能是导致此失败的原因。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多