Visual Basic .Net: Hacer una linea con el mouse, y moverla como un objeto con el teclado.
--------------------------------------------------------------------------------
Autor: supersergioman@hotmail.com
Universidad Nacional de Trujillo --- Peru
Puede parecer facil el titulo propuesto, pero podemos aprender muchos temas con este reto. A ver piensen un poco cual seria como seria el programa, aver..........., facil, capturo los click del mouse, claro serian dos, uno para el punto inicial y otro para el punto final, listo ahora lo dibujo. Pero como puedo mover esa linea a donde yo quiera?, dibujo una nueva linea, puede ser, muevo el fondo, puede ser, etc. Si quiero mover a la linea creada tengo que tratarla como un objeto, es decir hacer uso de P.O.O. (programacion orientada a objetos).
Auque paresca muy tedioso hacer clases, -si lo puedo hacer en el windows.form, si puede hacer pero la P.O.O, le da muchas caracteristicas a tu programa, cuando mas cresca tu programa no se te hara tan díficil si usaste P.O.O. Yo para este programa solo voy a usar dos clases: DrawLine.vb (formulario windows), y Linea.vb.
Clase Linea.vb
Public Class Linea
'atributos de la clase
Private iniX As Integer
Private iniY As Integer
Private finX As Integer
Private finY As Integer
'lapiz del pincel
Private myPen As Pen
'------------------------
'aqui falta las declaraciones Property, en el zip esta todo
'---------------------
'constructor
Public Sub New(ByVal iX As Integer, ByVal iY As Integer, ByVal fX As Integer, ByVal fY As Integer)
iniX = iX
iniY = iY
finX = fX
finY = fY
'estableciendo el lapiz por defecto
myPen = New Pen(Color.Gold, 4)
End Sub
'ahora si metodos principales de la clase
Public Sub Move(ByVal str As String)
Select Case str
Case "U" 'mover arriba
iniY -= 2
finY -= 2
Case "D" 'mover abajo
iniY += 2
finY += 2
Case "R" 'mover derecha
iniX += 2
finX += 2
Case "L" 'mover izquierda
iniX -= 2
finX -= 2
End Select
End Sub
End Class
Clase DrawLine.vb
'mi objeto para dibujar
Private g As Graphics
Public Sub DrawMyLine()
'creando el objeto
g = PicFondo.CreateGraphics()
g.Clear(Color.White)
'ahora dibujando la lina
g.DrawLine(myLine.Pincel, myLine.pIniX, myLine.pIniY, myLine.pFinX, myLine.pFinY)
End Sub
Private Sub CmdDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdDraw.Click
MsgBox("hacer un click en el Picture, mantenerlo presionado y mover el mouse")
dibujar = True
'creando el objeto a usar
myLine = New Linea(0, 0, 0, 0)
End Sub
'----------------------------------------------
'Con los tres modos del mouse se dibuja la linea
Private Sub PicFondo_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicFondo.MouseDown
If dibujar Then
If Not dibujando Then
myLine.pIniX = e.X
myLine.pIniY = e.Y
'ya se hizo el primer punto
dibujando = True
End If
End If
End Sub
Private Sub PicFondo_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicFondo.MouseMove
If dibujando Then
myLine.pFinX = e.X
myLine.pFinY = e.Y
Me.DrawMyLine()
End If
End Sub
Private Sub PicFondo_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicFondo.MouseUp
'se termino de dibujar la linea
dibujando = False
'ahora mover la linea
Me.Panel1.Visible = True
End Sub
'--------------------------------------------------
'----------------------------------------------
'ahora se lo va amover
Private Sub CmdMove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdMove.Click
'ya no crear otra linea
Me.dibujar = False
'CmdDraw.Enabled = False
'cambiar el ancho
Try
If (TxtAncho.Text <> "") Then
myLine.Ancho = Integer.Parse(TxtAncho.Text)
End If
Catch er As Exception
MsgBox("no ingreso un ancho correcto, se tomara el anterior")
End Try
'mandano un mensaje
MsgBox("mover la linea con el teclado")
'mover
Me.mover = True
'mandando el foco
Me.TxtKeyCode.Focus()
End Sub
Private Sub TxtKeyCode_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TxtKeyCode.KeyDown
'si se puede mover el objeto
If Me.mover Then
Select Case e.KeyCode
Case Keys.Up
myLine.Move("U")
Me.DrawMyLine()
Case Keys.Down
myLine.Move("D")
Me.DrawMyLine()
Case Keys.Left
myLine.Move("L")
Me.DrawMyLine()
Case Keys.Right
myLine.Move("R")
Me.DrawMyLine()
End Select
End If
End Sub
'------------------------------------------------------
End Class
Autor: sergio