Q:

why is the index of the one-dimensional array changing this way?

I'm a beginner and I'm encountering a problem with an index of a one-dimensional array of strings (m_nameList in the code) that I'm struggling to understand. I have one method (in a class of a Windows Form Application that is not the MainForm) that returns FALSE if a string of the array at a certain index is empty, and viceversa. It looks like this: 
Public Function IsReserved(index As Integer) As Boolean
    Dim reserved As Boolean = False
    If (Not String.IsNullOrEmpty(m_nameList(index))) Then
        reserved = True
    Else
        reserved = False
    End If
    Return reserved
End Function

I have also a method on the MainForm that calls for it, and if the first method returns true then the second one displays a dialog box, otherwise it doesn't (lstResults is a listbox that has for items the strings of the array):
Private Function CheckIfSeatIsAlreadyReserved() As Boolean
    Dim reserved As Boolean = m_seatMngr.IsReserved(lstResults.SelectedIndex)
    If (reserved) Then
        Dim msgBox As Integer = MessageBox.Show("The seat is already             reserved.     Would you like to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If (msgBox = DialogResult.Yes) Then
            Return True
        Else
            Return False
        End If
    Else
        Return True
    End If
End Function

The problem I find is: if as in the code of the first method above I don't initialize index to any value, the second method will work perfectly, but I'll get a runtime error if I don't select any item on the listBox (and therefore index = -1). On the other hand, if I initialize index to 0 or to m_nameList.Length, then the program won't have any problems if I don't select any item on the ListBox and it will nicely display a warning message I wrote for that case, BUT the second method will behave in a weird way: it will find ALL the strings of the array full even if I only "write" the first one, or it will find ALL the strings empty if I "write" any string that it's not the first one (by writing I mean that I call for a method that puts my input as the text of the string selected). Any idea on why this happens and how I can fix it? Thank you so much.

A:

I will get to the answer below, follow the logic, lets look at your first method. You can refactor it to 
Public Function IsReserved(index As Integer) As Boolean
    Return Not String.IsNullOrEmpty(m_nameList(index))
End Function

Everything else is called "noise". But as Fabio pointed, what if index is bad? Lets add useful code 
Public Function IsReserved(index As Integer) As Boolean
    If index < 0 OrElse index > m_nameList.Length - 1 Then
        Throw New ArgumentOutOfRangeException(". . .  . .")
    End If

    Return Not String.IsNullOrEmpty(m_nameList(index))
End Function

If you get this exception, your program has a bug - and you know to fix the consumer of this function.
And now lets get to your message 

second method will behave in a weird way: it will find ALL the strings of the array full even if I only "write" the first one, or it will find ALL the strings empty if I "write" any string

Most likely reason why it happens - simply because you create condition when you send same value over and over again. Therefore result is same. And this is most likely a bug
If (reserved) Then
. .  . . .  .
Else
    Return True  ' <---- BUG ALLERT
End If

And two more things, your second method can shrink down to 1 line too.
Private Function CheckIfSeatIsAlreadyReserved() As Boolean
    Return m_seatMngr.IsReserved(lstResults.SelectedIndex) AndAlso _
           DialogResult.Yes = MessageBox.Show("The seat is already             reserved.     Would you like to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

End Function

And, if you do some sort of reservation, array is not really good idea. How about Dictionary(Of String, Boolean)? Your theater or airplane has bunch of seats and you pre-load your dictionary with those
d.Add("1A", False)
d.Add("1B", False)
d.Add("1C", False)
d.Add("1D", False)
d.Add("1E", False)
d.Add("1F", False)

This is your whole airplane row. Now you can do much more with it

