1

私はこの問題で実行を続け、テーブルを生成するforステートメントから飛び出します。3時間の大部分でコードを注いでいますが、何が問題になっているのかわからないので、別のペアが必要だと思います目の。

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

4

2 に答える 2

0

Forループにブレークポイントを追加して、どの時点でエラーが生成されているかを確認できますか?その場合は、例外をスローする直前にローカル変数の値を確認してください。

範囲外の例外は、存在しない配列/コレクションアイテムにアクセスしようとしていることが原因である可能性があります。

たとえば、myArray(4)には5つのアイテムがあり、myArray(5)にアクセスしようとすると、インデックスが0から始まるため、範囲外の例外が発生します。

于 2012-03-29T12:24:31.083 に答える
0

forinVB.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
于 2012-03-29T12:17:15.570 に答える