Winforms 运行我的代码vb.net时,继续获取argumentOutOfRangeExceptions

Winforms 运行我的代码vb.net时,继续获取argumentOutOfRangeExceptions,winforms,vb.net-2010,tablelayoutpanel,Winforms,Vb.net 2010,Tablelayoutpanel,我一直在这个问题上运行,它将跳出生成表的for语句,我花了三个多小时的时间反复阅读代码,我找不到哪里出了问题,所以我想我需要另一双眼睛 共享函数DrawGrid()作为TableLayoutPanel Dim dayNames作为新的ArrayList dayNames.Add(“星期一”) dayNames.Add(“星期二”) dayNames.Add(“星期三”) dayNames.Add(“星期四”) dayNames.Add(“星期五”) dayNames.Add(“星期六”) da

我一直在这个问题上运行,它将跳出生成表的for语句,我花了三个多小时的时间反复阅读代码,我找不到哪里出了问题,所以我想我需要另一双眼睛

共享函数DrawGrid()作为TableLayoutPanel
Dim dayNames作为新的ArrayList
dayNames.Add(“星期一”)
dayNames.Add(“星期二”)
dayNames.Add(“星期三”)
dayNames.Add(“星期四”)
dayNames.Add(“星期五”)
dayNames.Add(“星期六”)
dayNames.Add(“星期日”)
整数小时数=8
整数形式的分钟数=0
Dim timeType为String=“AM”
Dim dayLength As Integer=12
将时间表变暗为新的TableLayoutPanel
timeline.CellBorderStyle=表格布局面板CellBorderStyle.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
端函数

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 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

您是否能够向For循环添加断点,以查看在哪一点生成错误?如果是,请在抛出异常之前检查局部变量值

超出范围的异常可能是因为您试图访问不存在的数组/集合项


例如,myArray(4)有5个项目,如果我尝试访问myArray(5),我将得到一个超出范围的异常,因为索引从0开始。

使用8的原因是因为第一列中有时间标签。那么,您可能希望从1开始迭代,而不是从0开始?因为我仍然不明白为什么你要迭代8次,而一周只有7天。你描述的是OOR异常的定义。我很确定他明白了,因为他不知道VB.net中的for循环是如何工作的。啊,我明白了。是的,我很确定是数组导致了问题,因为这就是问题所在。谢谢你的帮助。是的,我同意,引发异常的行是lblDay.Text=CStr(dayNames.Item(days))由于Dayname试图访问arraylist中不存在的第8项。Dayname只有7项,但您对其进行了8次迭代,因此出现异常。
      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