不断得到一个argumentOutOfRangeExceptions当运行我的代码vb.net

问题描述:

我一直在这个问题上运行,它会跳出for语句生成表,我一直在倾倒代码的三个小时的更好的一部分和我找不到出了什么问题,所以我想我需要另一双眼睛。不断得到一个argumentOutOfRangeExceptions当运行我的代码vb.net

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

+0

DAYNAME只有7个项目,但你正在迭代8次,所以你会得到一个异常。 – squelos 2012-03-29 12:28:08

您是否可以将一个断点添加到For循环中以查看正在生成错误的点?如果是这样,请检查局部变量值是在抛出异常之前。

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

例如myArray的(4)有5个项目,如果我尝试访问myArray的(5)我会得到一个超出范围的例外,因为该指数从0开始

+0

那么你所描述的是一个OOR异常的定义。林肯定他得到它,因为他不知道如何在VB.net for循环工作。 – squelos 2012-03-29 12:27:03

+0

啊我得到它你好我确定它的数组是这样的问题,因为它切断了谢谢你的帮助 – Ardenexal 2012-03-29 12:30:34

+0

是的我会同意,将引发异常的行是lblDay.Text = CStr(dayNames.Item (天)),因为它试图访问不存在的数组列表中的第8项。 – 2012-03-29 12:32:06

VB.NETfor是包容性的,如:

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

8的原因是因为第一列中有时间标签 – Ardenexal 2012-03-29 12:21:46

+0

那么,你可能想从1开始迭代,而不是0?因为我仍然无法明白你为什么要迭代8次,每周只有7天。 – squelos 2012-03-29 12:23:22

+0

嗯嗯,我看到你的观点,感谢你看着它 – Ardenexal 2012-03-29 12:32:10