Object reference not set to an instance of an object, bei Übergabe eines Arrays an eine Public Function

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Object reference not set to an instance of an object, bei Übergabe eines Arrays an eine Public Function

    Guten Tag allerseits,
    ich bin vb.net Anfänger und habe da ein kleines Problem.

    Das Problem: Ich versuche aus mehreren Textboxen die Werte in einem Array zu speichern, diese an eine Funktion weiter zu geben, damit daraus ein weiterer Wert berechnet wird. Der berechnete Wert soll zurück gegeben und in eine neue Textbox eingetragen werden.
    An irgendeiner Stelle klappt das nur mit der Weitergabe nicht und ich erhalte eine Null Refrence Exception.

    Kleine Ergänzung: Es handelt sich um eine WPF-Anwendung

    Leider konnten mir Google, Bücher und eigenes Wissen nur insofern helfen, als das ich jetzt weiß das es ein häufiger Fehler ist und verschiedene Ursachen haben kann. Und die Themen die ich über die SuFu gefunden habe, sind auch so speziell, das sie mir nicht helfen oder einfach nicht auf mein Problem übertragen kann.
    Ich habe jetzt seit 2 Wochen versucht das Problem mit Google zu lösen, bin aber auf kein akzeptables Ergebnis gekommen.
    Über Hilfe und Anregungen würde ich mich freuen.

    Option Strict On ist in den Einstellungen eingestellt.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Class MainWindow
    2. Public berechnung As CRechenmodul
    3. Private txtAusgaben() As TextBox
    4. Public Sub New()
    5. ' Dieser Aufruf ist für den Designer erforderlich.
    6. InitializeComponent()
    7. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    8. txtAusgaben = New TextBox() {Me.txtAusg0, Me.txtAusg1, Me.txtAusg2, Me.txtAusg3, Me.txtAusg4, Me.txtAusg5, Me.txtAusg6}
    9. End Sub
    10. Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    11. Dim testList As New List(Of String)()
    12. Dim testArray(0 To 7) As Double
    13. Dim ausgWert() As String
    14. Dim i, j As Integer
    15. For i = 1 To txtAusgaben.GetUpperBound(0) '
    16. testList.Add(txtAusgaben(i).Text)
    17. Next i
    18. ReDim ausgWert(0 To testList.Count - 1)
    19. testList.CopyTo(ausgWert)
    20. For j = 0 To ausgWert.GetUpperBound(0)
    21. testArray(j) = Double.Parse(ausgWert(j))
    22. Next
    23. Try
    24. txtAusgaben(0).Text = berechnung.AusgabenSumme(testArray).ToString
    25. Catch ex As Exception
    26. MessageBox.Show(ex.Message)
    27. End Try
    28. End Sub
    29. End Class


    VB.NET-Quellcode

    1. Public Function AusgabenSumme(ausgabenWerte() As Double) As Double
    2. Dim Summe As Double
    3. For i As Byte = 0 To 5
    4. Summe += ausgabenWerte(i)
    5. Next i
    6. Return Summe
    7. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Feltor“ ()

    Hmm ja, der vb.net Code Button ist irgendwie an mir vorbei gegangen. Der Fehler ist behoben.

    Der Eigentliche Fehler tritt an dieser Stelle auf

    VB.NET-Quellcode

    1. Try
    2. txtAusgaben(0).Text = berechnung.AusgabenSumme(testArray).ToString
    3. Catch ex As Exception
    4. MessageBox.Show(ex.Message)
    5. End Try


    Allerdings bin ich mir nicht sicher, ob das übergeben des Arrays schon nicht funktioniert oder ob der als einfache Double-Variable zurück gegebene Wert mir den Tag vermiesen möchte.
    Na dann schreib doch mal Deinen Code zum Testen und Debuggen wie folgt um:

    VB.NET-Quellcode

    1. Dim dblAusgabeSum = AusgabenSumme(testArray)
    2. Dim berechneterWert = berechnung.dblAusgabeSum
    3. txtAusgaben(0).Text = berechneterWert.ToString

    Und dann mit dem Debugger zeilenweise testen: Debuggen, Fehler finden und beseitigen

    Was soll übrigens CRechenmodul sein? - "Public berechnung As CRechenmodul"

    Ohne dem können wir nur raten, was Dein Code machen soll - aber besser ist es ohnehin, wenn Du es mit dem Debugger testest!