Winforms 运行我的代码vb.net时,继续获取argumentOutOfRangeExceptions
我一直在这个问题上运行,它将跳出生成表的for语句,我花了三个多小时的时间反复阅读代码,我找不到哪里出了问题,所以我想我需要另一双眼睛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
共享函数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