Получение ошибки «Ссылка на объект не установлена на экземпляр объекта» при передаче строки между классами с использованием 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 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 " amp; testNumber amp; Environment.NewLine amp; "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
 

Я создал документ для его тестирования, поэтому, если вам нужна полная программа, дайте мне знать, и я могу разместить ее здесь для вас!
Моя цель — передать функции то, что находится в скобках (передается как деталь), чтобы могло появиться сообщение об ошибке. Я понимаю, что ошибка связана с тем, что значение, по-видимому, равно нулю, хотя я его определил?
Я что-то делаю не так?

Я надеюсь, что это имеет смысл! Спасибо!

Комментарии:

1. Когда я это делаю (в верхней части класса students), программа не запускается, и я получаю System. Ошибка исключения StackOverflowException? Нужно ли мне объявлять ее внутри функции?

Ответ №1:

Возможно, вам потребуется создать экземпляр вашего класса, а не только объявить его.

Вместо этого: Public mainform As frmStudentTrackers попробуйте сделать это:

Public mainform As New frmStudentTrackers

Комментарии:

1. Спасибо! Я понял, что мне тоже нужно поместить это в функцию! Теперь это работает! Большое вам спасибо! Но по какой-то причине strconv не преобразует «n / a» в верхний регистр?

2. Работает ли это с «true» и «false», а не с «n / a»?

3. да, я добавил точку останова, и по какой-то причине она просто не будет работать с «n / a»

4. Я могу только думать, что это как-то связано с добавляемым символом «/», но я пробовал это сам, и он отлично работает со строкой, содержащей «n / a»

5. Это была моя первоначальная мысль! По какой-то причине, когда я ввожу «n / a» или «N / A», я получаю сообщение об ошибке?