Hola a todos, solicito a alguien que pueda ayudarme a modificar el siguiente programa que acabo de realizar, apenas me estoy familiarizando con vb .net y me esta enloqueciendo el "DragOver", el programa inicia dando dos clics y se traza automáticamente una recta que une ambos puntos (los dos clics previos), estos "puntos" son dos picturebox con una imagen de un pequeño círculo, hasta aqui todo bien, de hecho al hacer clic en el botón "Inicializar", se borra todo y podemos repetir el trazo de la recta al dar dos clics de nuevo, repito hasta aqui todo bien, la bronca es cuando deseo "mover" ambos puntos (A y B), para lograr que la recta asuma otra posición, lo que programe aparentemente lo hace, sin embargo al tratar de mover ambos puntos las nuevas posiciones de ambos puntos no son las que corresponden al dragover que he efectuado, el código es:
Option Explicit On
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1
Dim miLapicero As New Pen(Color.Maroon, 2) 'de grosor 2
Dim k As Integer
Dim matriz(2, 2) As Integer
Dim m_MouseIsDown As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
k = 1
Me.AllowDrop = True
Me.puntoA.AllowDrop = True
Me.puntoB.AllowDrop = True
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If k = 1 Then
matriz(1, 1) = e.X
matriz(1, 2) = e.Y
puntoA.Visible = True
puntoA.Left = e.X - 5
puntoA.Top = e.Y - 5
k = k + 1
Else
If k = 2 Then
matriz(2, 1) = e.X
matriz(2, 2) = e.Y
puntoB.Visible = True
puntoB.Left = e.X - 5
puntoB.Top = e.Y - 5
' dibuja una línea con este Pen miLapicero
traza_recta()
k = k + 1
End If
End If
End Sub
Private Sub traza_recta()
Me.CreateGraphics.DrawLine(miLapicero, New Point(matriz(1, 1), matriz(1, 2)), New Point(matriz(2, 1), matriz(2, 2)))
End Sub
Private Sub puntoA_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles puntoA.DragEnter
If e.Data.GetDataPresent(DataFormats.Bitmap) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub puntoA_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles puntoA.DragOver
e.Effect = DragDropEffects.Move
puntoA.Left = e.X - 5
puntoA.Top = e.Y - 5
matriz(1, 1) = e.X
matriz(1, 2) = e.Y
traza_recta()
End Sub
Private Sub puntoA_GiveFeedback(ByVal sender As Object, ByVal e As System.Windows.Forms.GiveFeedbackEventArgs) Handles puntoA.GiveFeedback
traza_recta()
End Sub
Private Sub puntoB_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles puntoB.DragEnter
If e.Data.GetDataPresent(DataFormats.Bitmap) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub puntoB_GiveFeedback(ByVal sender As Object, ByVal e As System.Windows.Forms.GiveFeedbackEventArgs) Handles puntoB.GiveFeedback
traza_recta()
End Sub
Private Sub puntoA_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles puntoA.MouseDown
m_MouseIsDown = True
End Sub
Private Sub puntoB_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles puntoB.DragOver
e.Effect = DragDropEffects.Move
puntoB.Left = e.X - 5
puntoB.Top = e.Y - 5
matriz(2, 1) = e.X
matriz(2, 2) = e.Y
traza_recta()
End Sub
Private Sub puntoB_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles puntoB.MouseDown
m_MouseIsDown = True
End Sub
Private Sub puntoA_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles puntoA.MouseMove
If m_MouseIsDown Then
puntoA.DoDragDrop(puntoA.Image, DragDropEffects.Move)
End If
m_MouseIsDown = False
End Sub
Private Sub puntoB_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles puntoB.MouseMove
If m_MouseIsDown Then
puntoB.DoDragDrop(puntoB.Image, DragDropEffects.Move)
End If
m_MouseIsDown = False
End Sub
Private Sub inicializa_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inicializa.Click
k = 1
Me.Refresh()
puntoA.Visible = False
puntoB.Visible = False
End Sub
End Class
De manera anticipada, doy las gracias por la atención dada, si te interesa este programa pero en vb6, hazmelo saber, como comentario adicional, con este programa estoy intentando involucrarme con la geometria dinámica, hasta pronto, mi correo es [email protected].
Saludos Prof. Montiel