2012-08-01 4 views
0

PictureBox 컨트롤이 있습니다. 컨트롤에서 이미지를 클릭하면 이벤트 처리기가 시작됩니다.ArgumentOutOfRangeException을 처리하는 방법은 무엇입니까?

System.ArgumentOutOfRangeException이이 처리되지 않은 :이 예외입니다

pixelColor = img.GetPixel(clickPoint.X, clickPoint.Y) 

:

Private Sub pbImageHolder_Click(ByVal sender As Object, _ 
           ByVal e As EventArgs) Handles pbImageHolder.Click 

    Dim clickPoint As Point = MousePosition 
    Dim img As Bitmap = New Bitmap(pbImageHolder.Image) 
    pixelColor = img.GetPixel(clickPoint.X, clickPoint.Y) 

    For i As Integer = 0 To img.Width 
    For j As Integer = 0 To img.Height 

    Next 
    Next 
End Sub 

문제는 내가이 행에서 얻을 수 있습니다 : 여기

이벤트 핸들러
메시지 = 매개 변수는 양수 여야하고 너비는 <이어야합니다.

매개 변수 이름 : X
paramName에 = X
소스

어떤 생각이 어떻게 코드를 수정할 수 System.Drawing =?

답변

1

SizeMode가 기본 Normal (아래 Hans의 설명 참조)이라고 가정하면 MouseClick 이벤트는 마우스 위치를 전달할 것이므로 클릭 대신 처리하기에 더 적합한 이벤트입니다.

또한 포인트가 이미지 범위 내에 있는지 확인해야합니다.

Private Sub pbImageHolder_MouseClick(ByVal sender As Object, _ 
            ByVal e As MouseEventArgs) _ 
            Handles pbImageHolder.MouseClick 

    Using img As Bitmap = New Bitmap(pbImageHolder.Image) 
    If New Rectangle(Point.Empty, img.Size).Contains(e.Location) Then 
     pixelColor = img.GetPixel(e.Location.X, e.Location.Y) 
     For i As Integer = 0 To img.Width - 1 
     For j As Integer = 0 To img.Height - 1 

     Next 
     Next 
    End If 
    End Using 
End Sub 

루핑의 경우 너비와 높이보다 하나 작게하십시오.

범위를 모르는 경우가 아니라면이 오류에 대한 Try-Catch가 필요하지 않지만이 경우 범위가 이미지의 크기와 관련되어 있음을 알 수 있습니다.

+0

PictureBox.SizeMode가이 코드를 엉망으로 만듭니다. 그것이 OP와 함께했던 것처럼. –

+0

@HansPassant 좋은 지적. OP는 또한 MousePosition을 사용하고 있습니다. – LarsTech

0

방어 프로그래밍 (null 및 범위를 벗어나는 변수 값 테스트)과 적절한 try/catch 블록 (심지어 catchArgumentOutOfRangeException 예외 자체를 사용하여 방어적인 전술 '실패한').

관련 문제