продолжаю получать аргументOutOfRangeExceptions при запуске моего кода vb.net - PullRequest
1 голос
/ 29 марта 2012

Я продолжаю работать в этом выпуске, где он выпрыгнет из операторов for, которые генерируют таблицу, я пролил код на большую часть трех часов, и я не могу найти, что идет не так, поэтому я думаю, что я нужна другая пара глаз.

Shared Function DrawGrid() As TableLayoutPanel
Dim dayNames As New ArrayList
dayNames.Add("Monday")
dayNames.Add("Tuesday")
dayNames.Add("Wednesday")
dayNames.Add("Thursday")
dayNames.Add("Friday")
dayNames.Add("Saturday")
dayNames.Add("Sunday")
Dim hour As Integer = 8
Dim minute As Integer = 0
Dim timeType As String = "AM"
Dim dayLength As Integer = 12
Dim timetable As New TableLayoutPanel
timetable.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset

'Loops through days one at a time this creates the labels and adds them for reference by the user but is not needed for the timetable creation
For days As Integer = 0 To 7
    timetable.ColumnCount += 1
    timetable.RowCount += 1
    If days > 0 Then
        Dim NamePos As New TableLayoutPanelCellPosition(days, 0)
        Dim lblDay As New Label

        lblDay.Text = CStr(dayNames.Item(days))

        timetable.SetCellPosition(lblDay, NamePos)
        timetable.Controls.Add(lblDay)
    End If

    For time As Integer = 0 To dayLength
        Dim rowPos As New TableLayoutPanelCellPosition(days, time)
        Dim lblTime As New Label
        Dim timeString As String
        timetable.RowCount += 1
        If days = 0 Then
            minute += 6
            If minute = 6 Then
                minute = 0
                hour += 1

            End If
            If hour = 13 Then
                hour = 1
                timeType = "PM"
            End If
            timeString = "Time is " & hour & ":" & minute & "0 " & timeType
            lblTime.Text = timeString

            timetable.SetCellPosition(lblTime, rowPos)

            timetable.Controls.Add(lblTime)
            timetable.Visible = True

        End If


    Next
Next
timetable.GrowStyle = TableLayoutPanelGrowStyle.AddColumns
timetable.AutoSize = True
MessageBox.Show("Working")
Return timetable

End Function

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Можете ли вы добавить точку останова в цикл For, чтобы увидеть, в какой точке генерируется ошибка? Если это так, проверьте значения локальных переменных непосредственно перед тем, как будет выдано исключение.

Исключение вне диапазона может быть из-за того, что вы пытаетесь обратиться к несуществующему элементу массива / коллекции.

Например, myArray (4) имеет 5 элементов, если я попытаюсь получить доступ к myArray (5), я получу исключение вне диапазона, поскольку индекс начинается с 0.

0 голосов
/ 29 марта 2012

for в VB.NET включительно, например:

            For i = 0 To 5
                Debug.WriteLine(i)' outputs : 0,1,2,3,4,5
            Next

Так что вы можете использовать некоторые -1 при цикле.

Например, это повторяется 8 раз, а вы хотите повторять только 7 раз (если в вашей стране у вас не будет 8 дней в неделю)

For days As Integer = 0 To 7 

Вот возможная коррекция:

      For days As Integer = 0 To 6
            timetable.ColumnCount += 1
            timetable.RowCount += 1
            If days > 0 Then
                Dim NamePos As New TableLayoutPanelCellPosition(days, 0)
                Dim lblDay As New Label

                lblDay.Text = CStr(dayNames.Item(days))

                timetable.SetCellPosition(lblDay, NamePos)
                timetable.Controls.Add(lblDay)
            End If

            For time As Integer = 0 To dayLength - 1
                Dim rowPos As New TableLayoutPanelCellPosition(days, time)
                Dim lblTime As New Label
                Dim timeString As String
                timetable.RowCount += 1
                If days = 0 Then
                    Minute += 6
                    If Minute() = 6 Then
                        Minute = 0
                        Hour += 1

                    End If
                    If Hour() = 13 Then
                        Hour = 1
                        timeType = "PM"
                    End If
                    timeString = "Time is " & Hour() & ":" & Minute() & "0 " & timeType
                    lblTime.Text = timeString

                    timetable.SetCellPosition(lblTime, rowPos)

                    timetable.Controls.Add(lblTime)
                    timetable.Visible = True

                End If


            Next
        Next
...