2015-01-08 1 views
-1

Итак, моя проблема в том, что я хочу иметь сразу несколько прямоугольников. Однако я также хочу, чтобы эти прямоугольники можно было щелкнуть и перетащить через форму. Это мой текущий код для перетаскивания прямоугольника, который был нарисован на форме с помощью панели инструментов.Нажмите и перетащите реализацию на прямоугольник VB.NET

Public Class DragRectangle 
Dim Go As Boolean 
Dim LeftSet As Boolean 
Dim TopSet As Boolean 

Dim HoldLeft As Integer 
Dim HoldTop As Integer 

Dim OffLeft As Integer 
Dim OffTop As Integer 


Private Sub obj1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RectangleShape1.MouseUp 
    Go = False 
    LeftSet = False 
    TopSet = False 
End Sub 

Private Sub obj1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RectangleShape1.MouseDown 
    Go = True 
End Sub 

Private Sub obj1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RectangleShape1.MouseMove 
    If Go = True Then 
     HoldLeft = (Control.MousePosition.X - Me.Left) 
     HoldTop = (Control.MousePosition.Y - Me.Top) 
     If TopSet = False Then 
      OffTop = HoldTop - sender.Top 
      TopSet = True 
     End If 
     If LeftSet = False Then 
      OffLeft = HoldLeft - sender.Left 
      LeftSet = True 
     End If 
     sender.Left = HoldLeft - OffLeft 
     sender.Top = HoldTop - OffTop 
    End If 
End Sub 
End Class 

Это прекрасно работает для одного прямоугольника, хотя это требует прямоугольников быть предварительно нарисованные на форму с помощью панели инструментов.

Я хочу, чтобы прямоугольник рисовался нажатием кнопки на форме, а вновь нарисованный прямоугольник можно было щелкнуть и перетащить в новое место.

Возможно ли это? Спасибо за любую помощь

ответ

0

Рабочий пример:

Public Class Form1 
    Private Property Rectangles As New List(Of DrgRectangle) 
    Private Property curRect As DrgRectangle 
    Private _x As Integer 
    Private _y As Integer 
    Private Sub loadme() Handles Me.Load 
    'load the rectangle in list 
    Rectangles.Add(New DrgRectangle With {.Rect = New Rectangle(20, 20, 20, 20)}) 
    End Sub 

    Private Sub FormMouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown 
    _x = e.X 
    _y = e.Y 
    For Each rect In Rectangles 
     If rect.Rect.Contains(e.X, e.Y) Then 
     curRect = rect 
     Exit For 
     End If 
    Next 
    End Sub 

    Private Sub FormMouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove 
    If e.Button = Windows.Forms.MouseButtons.Left Then 
     If curRect IsNot Nothing Then 
     curRect.Rect = New Rectangle(New Point(curRect.Rect.Location.X + (e.X - _x), curRect.Rect.Location.Y + (e.Y - _y)), curRect.Rect.Size) 
     Me.Refresh() 
     End If 
    End If 
    _x = e.X 
    _y = e.Y 
    End Sub 

    Private Sub FormPaint(sender As Object, e As PaintEventArgs) Handles me.Paint 
    For Each rect In Rectangles 
     e.Graphics.DrawRectangle(Pens.Black, rect.Rect) 
    Next 
    End Sub 
End Class 

Public Class DrgRectangle 
    Public Rect As New Rectangle 
    'add more properties as needed 
End Class 

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

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