2014-09-01 2 views
0

У меня есть выбор цвета, который я использую на картинке с MouseMove, а не Click, чтобы цвет отображался «на лету», однако, когда я покидаю границы изображение, я получаю сообщение об ошибке и не могу придумать, как лучше справиться с этим.Динамический выбор цвета в vb.net

Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove 
     If isWithin(DirectCast(sender, PictureBox), New Point(e.X, e.Y)) And e.Button = Windows.Forms.MouseButtons.Left Then 
      Dim bmptmp As New Bitmap(Me.PictureBox1.Image, Me.PictureBox1.Width, Me.PictureBox1.Height) 
      Dim clrtmp As Color = bmptmp.GetPixel(e.X, e.Y) '<--- error here 
      ... 
      ... 
     End If 
End Sub 

Я написал функцию isWithin и добавить его к If выше, как один из возможных способов проверки, но это не кажется, работает:

Public Function isWithin(pic As PictureBox, pnt As Point) 
    Dim rct1 As New Rectangle(pic.Top, pic.Left, pic.Width, pic.Height) 
    Dim rct2 As New Rectangle(pnt.X - 1, pnt.Y - 1, 1, 1) 
    Return rct1.IntersectsWith(rct2) 
End Function 

Ошибка Я получаю это

An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Drawing.dll - Additional information: Parameter must be positive and < Height 

(или < Width если я зашел слишком далеко вправо). Я предполагаю, что это потому, что либо e.X или e.Y больше не либо больше 0 или меньше, чем высота или ширина (что я пытался проверить с помощью функции isWithin)

+0

может быть приятно узнать, какую * ошибку вы получаете. у вас могут быть другие люди на горизонте, поскольку там есть некоторые ресурсы, которые могут быть неправильно уничтожены. – Plutonix

+0

@Plutonix Ах да, заново запомнится, чтобы получить ошибку. Поскольку я решил это уже, я забыл включить его в конце сообщения – bmgh1985

+0

@Plutonix добавил, что сообщение об ошибке теперь – bmgh1985

ответ

0

Фигурные его, как я печатал вопрос но я думал, что все равно добавлю его. Закрыл его в Try... Catch ex as Exception... End Try, а затем он работал нормально. Нет необходимости действительно обрабатывать ошибку, так как это ожидаемая ошибка, просто я неаккуратно и нахожусь на ней из мыслившегося поезда VBA («Do ... или нет». Нет попытки. » - Yoda & VBA)

+0

Также это делает мою функцию isWithin избыточной, поэтому удалил ее из окончательного кода – bmgh1985

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