2012-09-16 4 views
2
For i As Integer = 0 To _rows.Count 
     If (_rows(i).LeftOffset > largestOffset) Then 
      largestOffset = _rows(i).LeftOffset 
     End If 
    Next i 

    For i As Integer = 0 To _rows.Count 

이 코드는 결코 두 번째에 도착하지 않습니다. 끝점에 중단 점을 넣을 수 있습니다. _rows.Count에 대해 트리거해야합니다.하지만 두 번째 또는 그 이후에 중단 점이있는 경우 그것은 결코 도달하지 못했습니다. 이 오류 메시지가 없습니다 프로그램은 동결 또는 아무것도하지 않습니다 그리고 내가했던 정확하게 것처럼 동작합니다하위가 일찍 끝나고 있습니까?

For i As Integer = 0 To _rows.Count 
     If (_rows(i).LeftOffset > largestOffset) Then 
      largestOffset = _rows(i).LeftOffset 
     End If 
    Next i 

    Return 

    For i As Integer = 0 To _rows.Count 
+1

_rows.count -1을 시도 했습니까? 당신이 상한선 위에 있기 때문에 예외가 던질 수도 있습니다. –

답변

3

그것은 _rows.Count-1의 상한으로해야한다. 루프가 끝나는 마지막 시간은 IndexOutOfRangeException으로 실패합니다.

VB.net, 특히 Form_Load의 몇 군데에서 오류가 디버거에 표시되지 않고 Sub가 자동으로 종료되고 프로그램이 계속 실행됨을 확인했습니다. try ... catch 블록은 예외를 잡을 것입니다.

+0

고마워, 그래, 그냥 종료되었습니다, 나는 그것이 디버거의 버그 (또는 기능) 같아요. –

+0

그냥 디버거 일 뿐이라고 생각하지 않습니다. 런타임에 적용 할 때 오류가 여기에 다른 예외 처리기로 전파되지 않는다고 생각합니다. 이제는 복잡한 폼의 Form_Load 전체를 잡아내는 시도를 추가하는 습관이 있습니다. 모든 경우에도 메시지 상자에 예외가 표시되는 경우에도 마찬가지입니다. 초기화의 일부가 실행되지 않은 상태에서 나중에 상황이 폼 코드에서 충돌 할 때 실제 헤드 스크래쳐가 될 수 있습니다. –

관련 문제