-1

This program works like this: User enters building name and number of floors, that gets validated and accepted. Then user enters rates for each floor until it goes through all floors, that data gets added to a listbox, then user enters a desired floor and it adds the rent and other info to another listbox lower down. As soon as I enter my number of floors and click on the button to save the info, the program runs into an error under btnEnterBuilding Click event where it says dblRates(intHowMany) = dblRent. The error is

"An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication5.exe

Additional information: Object reference not set to an instance of an object."

Any help would be greatly appreciated, thanks!

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
Ňɏssa Pøngjǣrdenlarp
  • 37,255
  • 11
  • 50
  • 147
Big Ragu
  • 1
  • 1
  • 1
  • 3
    Possible duplicate of [What is a NullReferenceException and how do I fix it?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Blackwood Feb 14 '16 at 01:12
  • See also [post about creating arrays](http://stackoverflow.com/questions/35003606/when-do-i-need-to-use-a-new-keyword-when-creating-an-array/35004563#35004563) – Ňɏssa Pøngjǣrdenlarp Feb 14 '16 at 13:34

1 Answers1

1

You can't dim dblRates() as double like this without giving it initial values. You will need to dim dblRates(<some amount>) as Double and then redim it if necessary to add more values to it. Or you could Dim dblRates() as double = {0} but if you still want to add more values to the array, you will still need to redim it as the second options would just create an array of 1 element.

Charles May
  • 1,680
  • 1
  • 11
  • 18