不断得到一个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
您是否可以将一个断点添加到For循环中以查看正在生成错误的点?如果是这样,请检查局部变量值是在抛出异常之前。
超出范围的异常可能是因为您试图访问不存在的数组/集合项目。
例如myArray的(4)有5个项目,如果我尝试访问myArray的(5)我会得到一个超出范围的例外,因为该指数从0开始
在VB.NET
的for
是包容性的,如:
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
DAYNAME只有7个项目,但你正在迭代8次,所以你会得到一个异常。 – squelos 2012-03-29 12:28:08