2016-02-14 2 views
-1

Эта программа работает следующим образом: пользователь вводит название здания и количество этажей, которое проверяется и принимается. Затем пользователь вводит ставки для каждого этажа, пока он не пройдет через все этажи, данные не будут добавлены в список, затем пользователь вводит желаемый пол и добавляет ренту и другую информацию в другой список вниз. Как только я введу свое количество этажей и нажимаю кнопку, чтобы сохранить информацию, программа запускается в ошибку под событием btnEnterBuilding Click, где указано dblRates (intHowMany) = dblRent. Ошибка(VB.NET) Ссылка на объект не установлена ​​в экземпляр объекта

«Необработанное исключение типа„System.NullReferenceException“произошло в WindowsApplication5.exe

Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.»

Любая помощь была бы принята с благодарностью, спасибо!

Option Explicit On 
Option Strict On 
Option Infer Off 
Public Class Form1 
    Dim dblRates() As Double 
    Dim intHowMany As Integer = 0 'points to the next avail entry in the array 
    Private Function ValidateString(ByVal strText As String, strInput As String, strValue As String) As Boolean 
     If strText = Nothing Then 
      MessageBox.Show(strText & " Must Be Supplied", "Error") 
      Return False 
     Else 
      Return True 
     End If 
    End Function 
    Private Function ValidateInteger(ByVal strText As String, 
            ByVal strIn As String, 
            ByRef intValue As Integer, 
            ByVal intMinValue As Integer, 
            ByVal intMaxValue As Integer) As Boolean 
     If strIn = Nothing Then 
      MessageBox.Show(strText & " Must Be Supplied", "Error") 
      Return False 
     Else 
      If Integer.TryParse(strIn, intValue) = False Then 
       MessageBox.Show(strText & " Must Be A Whole Number", "Error") 
       Return False 
      Else 
       If intValue < intMinValue Or intValue > intMaxValue Then 
        MessageBox.Show("Outside of Number of " & strText & " Limits", "Error") 
        Return False 
       Else 
        Return True 
       End If 
      End If 
     End If 
    End Function 
    Private Function ValidateDouble(ByVal strText As String, 
            ByVal strDbl As String, 
            ByRef dblValue As Double, 
            ByVal dblMinValue As Double, 
            ByVal dblMaxValue As Double) As Boolean 
     If strDbl = Nothing Then 
      MessageBox.Show(strText & " Must Be Supplied", "Error") 
      Return False 
     Else 
      If Double.TryParse(strDbl, dblValue) = False Then 
       MessageBox.Show(strText & " Must Be A Whole Number", "Error") 
       Return False 
      Else 
       If dblValue < dblMinValue Or dblValue > dblMaxValue Then 
        MessageBox.Show("Outside of Number of " & strText & " Limits", "Error") 
        Return False 
       Else 
        Return True 
       End If 
      End If 
     End If 
    End Function 
    Private Sub Form1_Load(sender As Object, 
          e As EventArgs) Handles Me.Load 
     Me.grpBuilding.Enabled = True 
     Me.grpRents.Enabled = False 
     Me.grpDesiredFloor.Enabled = False 
    End Sub 
    Private Sub btnRents_Click(sender As Object, 
           e As EventArgs) _ 
           Handles btnRents.Click 
     Dim strName, strFloors As String 
     Dim intFloors As Integer 
     strName = txtName.Text 
     strFloors = txtFloors.Text 
     intFloors = CInt(strFloors) 
     If ValidateString("Building name", Me.txtName.Text, strName) = True Then 
      If ValidateInteger("Number of floors", Me.txtFloors.Text, intFloors, 3, 20) = True Then 
       Me.grpBuilding.Enabled = False 
       Me.grpRents.Enabled = True 
       Me.grpDesiredFloor.Enabled = False 
      End If 
     End If 


    End Sub 

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click 
     Close() 
    End Sub 

    Private Sub btnEnterBuilding_Click(sender As Object, 
            e As EventArgs) _ 
            Handles btnEnterBuilding.Click 
     Dim intFloors As Integer 
     Dim dblRent As Double 
     Dim strRent As String 
     strRent = txtRent.Text 
     dblRent = CDbl(strRent) 
     If ValidateDouble("Rent", Me.txtRent.Text, dblRent, 1000.0, 2500.0) = True Then 
      dblRates(intHowMany) = dblRent 
      Me.txtRent.Focus() 
      Me.txtRent.SelectAll() 
      Me.ListBox1.Items.Add("Floor No. " & intHowMany.ToString("N0") & 
            " -- Rent Is: " & dblRent.ToString("N$")) 
      If intHowMany < intFloors Then 
       intHowMany += 1 
      Else 
       Me.grpBuilding.Enabled = False 
       Me.grpRents.Enabled = False 
       Me.grpDesiredFloor.Enabled = True 
      End If 
     Else 
      Me.txtRent.Focus() 
      Me.txtRent.SelectAll() 
     End If 
    End Sub 

    Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click 
     Dim intFloors, intFloor As Integer 
     Dim strName, strFloors As String 
     strName = txtName.Text 
     strFloors = txtFloors.Text 
     intFloors = CInt(strFloors) 
     If ValidateInteger("Desired Floor", Me.txtFloor.Text, intFloor, 3, 20) = False Then 
      MessageBox.Show("Please enter a valid floor number", "Error", 
          MessageBoxButtons.OK, MessageBoxIcon.Error) 
     Else 
      Me.lstDisplay.Items.Add("Building Name: " & strName & " # of Floors: " & intFloors.ToString) 
      Me.lstDisplay.Items.Add("Desired Floor: " & intFloor.ToString) 
      Me.lstDisplay.Items.Add(" Rent: " & intFloors.ToString) 
     End If 
    End Sub 
End Class 
+3

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix- это) – Blackwood

+0

См. также [сообщение о создании массивов] (http://stackoverflow.com/questions/35003606/when-do-i-need-to-use-a-new-keyword-when-creating-an-array/ 35004563 # 35004563) – Plutonix

ответ

1

Вы не можете dim dblRates() as double, как это, не давая ей начальные значения. Вам нужно будет dim dblRates(<some amount>) as Double, а затем переустановите его, если необходимо, чтобы добавить к нему больше значений. Или вы могли бы Dim dblRates() as double = {0}, но если вы все еще хотите добавить в массив больше значений, вам все равно придется его переустановить, так как вторые параметры просто создадут массив из 1 элемента.

Смежные вопросы