2012-03-29 3 views
1

Я продолжаю работать в этой проблеме, где он выпрыгнет из операторов for, которые генерируют таблицу, я перелил код на лучшую часть из трех часов и я не могу найти, что происходит не так, поэтому я думаю, что мне нужна еще одна пара глаз.продолжайте получать аргументOutOfRangeExceptions при запуске моего кода 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

ответ

0

Можете ли вы добавить точку останова в цикл For, чтобы увидеть, в какой точке генерируется ошибка? Если это так, проверьте, какие значения локальной переменной перед вызовом исключения.

Исключительное исключение может быть связано с тем, что вы пытаетесь получить доступ к элементу массива/коллекции, который не существует.

Например туАггау (4) имеет 5 пунктов, если я пытаюсь получить доступ к MyArray (5) я получить из исключения диапазона, так как индекс начинается с 0.

+0

Хорошо, что вы описываете, это определение исключения OOR. Я уверен, что он получает его, потому что он не знает, как работает цикл for в VB.net. – squelos

+0

ahh я получаю его yeh im довольно уверен, что его массив вызывает проблему, как это, где его вырезание спасибо за помощь – Ardenexal

+0

Да, я согласен, строка, которая будет выбрасывать исключение, - lblDay.Text = CStr (dayNames.Item (дни)), поскольку он пытается получить доступ к 8-му элементу в arraylist, которого нет. –

0

for в 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 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

Ну, вы можете начать итерацию с 1, а не 0? Потому что я все еще не могу понять, почему вы повторяете 8 раз, когда неделя имеет только 7 дней. – squelos

+0

mmm yeh, я вижу вашу точку, спасибо, плохо смотрю в нее – Ardenexal

 Смежные вопросы

  • Нет связанных вопросов^_^