2012-03-29 6 views
1

この問題でテーブルを生成するfor文から飛び出す場所で実行し続けると、3時間のうちのより良い部分をコードに渡しています。私は間違っていることを見つけることができないので、もう一組の目が必要だと思います。私のコードを実行しているときに引き続き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から始まるので、私は、私は範囲例外のうちを取得します(5)myarrayのにアクセスしようとした場合、5つの項目がありますが、あなたそれを8回反復しているので、例外が発生しています。 – squelos

答えて

0

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

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

は、myarrayの(4)インデックスはわずか7アイテムを持っている0

+0

あなたが何を記述しているかはOOR例外の定義です。彼はVB.netのforループの仕組みを知っていないので、彼はそれを得ていると確信しています。 – squelos

+0

ahh私はそれをyehメイク私はかなり確かにそのthatsのthatsは、ヘルプのおかげで切り捨てて – Ardenexal

+0

はい私は同意する、例外をスローする行はlblDay.Text = CStr(dayNames.Item (日))存在しないarraylistの8番目の項目にアクセスしようとしています。 –

0

VB.NETforは例えば、包括的である:

  For i = 0 To 5 
       Debug.WriteLine(i)' outputs : 0,1,2,3,4,5 
      Next 

だから、ループ時に、いくつかの-1を使用する場合があります。ここでは例の反復処理し8回、あなたは(あなたの国であなたは週に8日を持っていない限り)のみ7回を繰り返すために欠けている間、

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

+0

さて、0ではなく1から反復を開始するとよいでしょうか?なぜなら、今週は7日間しかないのに、なぜあなたが8回反復しているのかわかりません。 – squelos

+0

mmm yeh私はあなたのポイントを参照してください病気それを見てください – Ardenexal

関連する問題