2016-06-06 4 views
0

Ich habe eine Unter mit zwei Variablen in einem Modul. Wenn sie aus dem Formular aufgerufen wird, löst die zweite Variable den Fehler aus. "Die Variable 'ala1' wird verwendet, bevor ihr ein Wert zugewiesen wurde. Zur Laufzeit könnte eine Nullreferenzausnahme entstehen." Das Ergebnis ist ein leeres Textfeld finden, wo mein Code nicht korrekt ist hier mein Code:.eine Variable in einem Modul löst einen Fehler beim Aufruf aus einem Formular

Module1

Dim N10, N02b, A6, N07 As Double 

Public Sub AxlPos(ByVal axl As Double, ByVal axla As String) 
    If axl > (N10 - N02b/1000) * modCos(A6) + N07 Then 
     axla = "in section 1" 
    ElseIf axl > (N10 - N02b/1000) * modCos(A6) Then 
     axla = "in section 2" 
    ElseIf axl > (N10/1000) * modCos(A6) Then 
     axla = "in section 3" 
    Else 
     axla = "in section 4" 
    End If 
End Sub 

Form1

Dim N10, N02b, A6, N07, al1 As Double 
Dim ala1 as string 

Private Sub btnSolve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSolve.Click 
    axlpos(al1,ala1) 
    Txtala1.Text = ala1 
End sub 

Antwort

3

ich schlage vor, Sie zu ändern Ihre Sub-Funktion, die eine Zeichenfolge zurückgibt.

Dim N10, N02b, A6, N07 As Double 

Public Function AxlPos(ByVal axl As Double) as String 
    Dim axla As String 
    If axl > (N10 - N02b/1000) * modCos(A6) + N07 Then 
     axla = "in section 1" 
    ElseIf axl > (N10 - N02b/1000) * modCos(A6) Then 
     axla = "in section 2" 
    ElseIf axl > (N10/1000) * modCos(A6) Then 
     axla = "in section 3" 
    Else 
     axla = "in section 4" 
    End If 
    return axla 
End Sub 

Und rufen Sie dann die Funktion mit

Dim N10, N02b, A6, N07, al1 As Double 

Private Sub btnSolve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSolve.Click 
    Txtala1.Text = axlpos(al1) 

End sub 

Der Fehler verursacht durch die Tatsache, dass Sie an dem Punkt, in dem die Methode aufrufen AxlPos die Variable auf die Methode übergeben (ala1) war nicht zugewiesen. Der Compiler warnt Sie, dass dies eine Null-Referenz-Ausnahme im Code verursachen könnte.
Es scheint jedoch, dass Sie die übergebene Variable basierend auf Ihren Berechnungen auf einen anderen Wert festlegen möchten, sodass die beste Vorgehensweise darin besteht, eine Funktion zu erstellen, die den berechneten Zeichenfolgenwert zurückgibt.

Wenn Sie noch Ihr Ansatz verwenden wollen, dann sollten Sie Ihren Code

Private Sub btnSolve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSolve.Click 

    ala1 = String.Empty 
    axlpos(al1,ala1) 
    Txtala1.Text = ala1 

End sub 

aber wichtig, dass Sie die ByVal in einem ByRef im Verfahren namens Modul ändern

Public Sub AxlPos(ByVal axl As Double, ByRef axla As String) 

See geändert werden sollte ByVal vs ByRef clarification

+0

Beide Lösungen funktionieren gut, aber die Funktion Option ist natürlich klüger. Danke vielmals. – Dom

Verwandte Themen