Vb.net “接收”;对象引用未设置为对象的实例;使用Sub(VB)在类之间传递字符串时出错

Vb.net “接收”;对象引用未设置为对象的实例;使用Sub(VB)在类之间传递字符串时出错,vb.net,Vb.net,我试图通过在另一个类中定义的函数传递字符串,但收到标题中的错误 代码定义: Public Class frmStudentTrackers Public Sub errorMessage(ByVal detail As String) MessageBox.Show(detail, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning) End Sub End Class 错误消息

我试图通过在另一个类中定义的函数传递字符串,但收到标题中的错误

代码定义:

Public Class frmStudentTrackers

    Public Sub errorMessage(ByVal detail As String)
        MessageBox.Show(detail, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    End Sub

End Class
错误消息实现:

Public Class Student

    Public mainform As frmStudentTrackers
    Public totalTestCompleted As Integer
    Public AllTests(7) As String

    Public Function getTestResults(ByRef totalTestsCompleted As Integer)
        totalTestCompleted = 0
        Dim arrayPos As Integer = 0
        Dim testNumber As Integer = 1

        For i = 0 To 7
            AllTests(arrayPos) = InputBox("Please Enter the result for test " & testNumber & Environment.NewLine & "Please enter True (Pass), False (Fail) Or N/A if not completed!", "Test Result Collection")
            AllTests(arrayPos) = StrConv(AllTests(arrayPos), vbUpperCase)
            If AllTests(arrayPos) = "TRUE" Or AllTests(arrayPos) = "FALSE" Then
                totalTestCompleted = totalTestCompleted + 1
            ElseIf AllTests(arrayPos) <> "TRUE" Or AllTests(arrayPos) <> "FALSE" Or AllTests(arrayPos) <> "N/A" Then
                mainform.errorMessage("This is not a valid option! The test result input will now restart. Please begin from test 1, inputing True (Pass), False (Fail) Or N/A if not completed!")
                End
            End If
            arrayPos = arrayPos + 1
            testNumber = testNumber + 1
        Next
        Return totalTestCompleted
    End Function

End Class
公共班级学生
作为frmStudentTrackers的公共主窗体
公共totalTestCompleted为整数
将所有测试(7)作为字符串公开
公共函数getTestResults(ByRef totalTestsCompleted为整数)
totalTestCompleted=0
Dim arrayPos作为整数=0
Dim testNumber为整数=1
对于i=0到7
AllTests(arrayPos)=InputBox(“请输入测试结果”&testNumber&Environment.NewLine&“如果未完成,请输入True(通过)、False(失败)或N/A!”,“测试结果集合”)
AllTests(arrayPos)=StrConv(AllTests(arrayPos),大写)
如果AllTests(arrayPos)=“真”或AllTests(arrayPos)=“假”,则
totalTestCompleted=totalTestCompleted+1
否则,如果所有测试(arrayPos)“真”或所有测试(arrayPos)“假”或所有测试(arrayPos)“不适用”,则
mainform.errorMessage(“这不是一个有效选项!测试结果输入现在将重新启动。请从测试1开始,输入True(通过)、False(失败)或N/a(如果未完成))
终点
如果结束
arrayPos=arrayPos+1
testNumber=testNumber+1
下一个
返回totalTestCompleted
端函数
末级
我做了一个文件来测试它,所以如果你需要完整的程序,让我知道,我可以把它放在这里给你! 我的目标是将括号中的内容(作为详细信息传递)传递给函数,以便出现错误消息。我理解这个错误是因为即使我已经定义了它,这个值也显然是空的? 我做错什么了吗


我希望这是有道理的!谢谢大家!

您可能需要实例类,而不仅仅是声明类

不要这样做:
Public mainform As frmStudentTrackers
尝试这样做:


Public main form As New frmStudentTrackers

当我这样做时(在学生班级的顶端),程序将不会运行,并且我收到一个System.StackoverflowException错误?我需要在函数中声明它吗?谢谢!我意识到我也需要把它放到函数中!现在开始工作了!非常感谢你!但出于某种原因,strconv不会将“n/a”转换为大写?它与“true”和“false”一起使用,而与“n/a”不一起使用吗?是的,它与“n/a”一起使用,我添加了一个断点,出于某种原因,它与“n/a”不一起使用。我只能认为它与正在添加的“/”字符有某种关联,但我自己也尝试过,它可以很好地处理包含“n/a”的字符串,这是我最初的想法!出于某种原因,当我输入“n/a”或“n/a”时,我会收到错误消息?