2016-10-05 6 views
0

私は、DataGridから値を取得し、各行のタグを文字列の配列に入れているモジュールを持っています。別のモジュールでその配列文字列を呼び出していますが、オブジェクトのインスタンスに設定されていないオブジェクトを取得しています。どうして?私が達成しようとしているのは、すべてのタグを文字列またはコレクションの配列にまとめ、別のモジュール上でそのタグにアクセスできるようにすることです。別のモジュールの変数にアクセスする際にエラーが発生しますか?

'my main module 
Public Class myMainModule 
    Public Shared myArray() As String 

    ...... 
    ....... 
    Public sub doSomething() 
    Dim myArray As New List(Of String) 
    For Each row As DataGridViewRow In mydatagrid.Rows 
     If row.Cells("mycheckbox").Value = True Then 
      myArray.Add(row.Tag) 
     End If 
    Next 
    End Sub 
End Class 


'....then i'm calling it from another module: 

Public Class myOtherModule 
    Public sub doit() 
    For Each value As String In myMainModule.myArray 
     Debug.Print(value) 
    Next 
    End Sub 
End Class 
+0

最後に 'return myArray.ToArray()'を忘れました。 'Option Strict Off'は、あなたがそれを忘れるとコンパイルエラーを引き起こしません。できるだけそれをオンにしてください。 – TyCobb

+0

@TyCobbどこを最後に参照していますか? – JustAnotherPersonYouDontKnow

+0

私が達成しようとしているのは、すべてのタグを文字列またはコレクションの配列にまとめ、別のモジュール上でそのタグにアクセスできるようにすることです。 – JustAnotherPersonYouDontKnow

答えて

1

呼び出す前に配列を初期化する必要があります。現在はNothingです。

Public Class MyMainModule 
    Public Shared MyArray() As String 

    Public Shared Sub DoSomething() 
     Dim myList As New List(Of String) 
     For Each row As DataGridViewRow In mydatagrid.Rows 
     If row.Cells("mycheckbox").Value = True Then 
      myList.Add(row.Tag) 
     End If 
     Next 

     MyArray = myList.ToArray() 
    End Sub 
End Class 

Public Class MyOtherModule 
    Public Sub Foo() 
     MyMainModule.DoSomething() 
     For Each value As String In MyMainModule.MyArray 
      Debug.Print(value) 
     Next 
    End Sub 
End Class 

他にも、名前付けに注意する必要があります。私はあなたがmyArrayと呼ばれるフィールドを持っていたので混乱していると信じていましたが、myArrayと呼ばれるローカル変数も持っていました。あなたは、新しい変数であるList(Of T)で作業していましたが、配列ではありませんでした。

関連する問題