2

私はこれで敗北を認めようとしています.VBにはかなり慣れていません.

次のコードに関する私の問題は、Button3_Click関数が実行されたときに、「Value cannot be null. Parameter name: 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
4

2 に答える 2

3

問題は FindComs メソッドにあります。
最初のループでは、文字を含むデバイスの USBCollection を検索し、Pそれらを数えます。2 番目のループでは、見つかったデバイスの数で戻り配列を次元化した後、文字列を
含むデバイスでこの配列を埋めようとします。名前に含まれる有効なデバイス数よりも大きな配列になります。COMCOMPCOM

配列が返されると、配列のすべてのスロットを追加しますが、NULL 値を持つスロットがあるため、エラーが発生します。名前に が含ま
れるデバイスについてのみ、アレイのサイズを指定する問題を修正できます。COM

For Each USB In USBCollection
    If USB("Name").ToString().Contains("COM") Then
        n += 1
    End If
Next USB
ReDim temp(n)
于 2013-03-30T21:08:23.340 に答える
2

Oded のコメントは、この失敗の最も可能性の高い原因です。

簡単なテストは、プロパティをクラス Nameの「test」などのデフォルト文字列に設定することです。comdevice

そうすれば、Nameプロパティが null になることはなく、変更されたかどうかを確認できます。

于 2013-03-30T21:10:39.933 に答える