2015-03-20 6 views
0

Я создаю программу скриншотов, и мне нужно, чтобы пользователь мог выбрать область снимка экрана с помощью мыши. До сих пор я мог программировать перетаскивание с верхнего левого на нижнее правое, но мои попытки сделать снизу справа вверху слева оказались безуспешными. Как это сделать?Рисование Прямоугольник в PictureBox

Это рабочий код для верхнего левого в нижний правый:

If e.X > SelectedPoint.X And e.Y > SelectedPoint.Y Then 
      recsize = New Point(e.X - SelectedPoint.X, e.Y - SelectedPoint.Y) 
      rectangle = New Rectangle(SelectedPoint, recsize) 

Вот полный код:

If IsMouseDown = True Then 
     Screenshot_PicBox.Refresh() 
     Dim recsize As Point 
     Dim rectangle As Rectangle 
     If e.X > SelectedPoint.X And e.Y > SelectedPoint.Y Then 
      recsize = New Point(e.X - SelectedPoint.X, e.Y - SelectedPoint.Y) 
      rectangle = New Rectangle(SelectedPoint, recsize) 
     ElseIf e.X < SelectedPoint.X And e.Y > SelectedPoint.Y Then 
      recsize = New Point(e.X - SelectedPoint.X, e.Y - SelectedPoint.Y) 
      SelectedPoint = New Point(-SelectedPoint.X, SelectedPoint.Y) 
      rectangle = New Rectangle(SelectedPoint, recsize) 
     End If 
     Screenshot_PicBox.CreateGraphics.DrawRectangle(Pens.Blue, rectangle) 
    End If 
+1

'CreateGraphics' весьма вероятно, не путь. То, что вы рисуете, не сохранится. – Plutonix

+0

Что вы подразумеваете под "persist"? Способ, которым я планирую работать, больше для визуальной обратной связи, и код не обязательно будет использовать форму для обрезки изображения. –

ответ

1

Вот один из способов. Он не использует Dim recsize As Point Однако, если вы предпочитаете, вы можете заменить его обратно в:

If IsMouseDown = True Then 
    Screenshot_PicBox.Refresh() 
    Dim rectangle As New Rectangle 
      If e.X > SelectedPoint.x Then 
       'left to right 
       rectangle.Width = e.X - SelectedPoint.x 
       rectangle.X = SelectedPoint.x 
      Else 
       'right to left 
       rectangle.Width = SelectedPoint.x - e.X 
       rectangle.X = e.X 
      End If 
      If e.Y > SelectedPoint.Y Then 
       'top to bottom 
       rectangle.Height = e.Y - SelectedPoint.Y 
       rectangle.Y = SelectedPoint.Y 
      Else 
       'bottom to top 
       rectangle.Height = SelectedPoint.Y - e.Y 
       rectangle.Y = e.Y 
      End If 
    Screenshot_PicBox.CreateGraphics.DrawRectangle(Pens.Blue, rectangle) 
End If 
+0

Я переработал эту программу на C#, и когда я увидел этот код, я вспомнил, откуда он взялся. Это действительно сработало, и я не могу поверить, что забыл поблагодарить тебя и +1! Так что спасибо, и мне очень жаль! –