Title: Creacion de Controles Personalizados con VB'Net
1Creacion de Controles Personalizados con VB.Net
- Jorge Barrientos
- Jorge.barrientos_at_gmail.com
2La pregunta?
- La pregunta siempre es la misma, como puedo crear
mis propios controles?
3Control propuesto
- Crearemos un control label que pueda moverse en
tiempo de ejecucion.
4Control Label Reubicable
- Crearemos un control creado por nosotros mismos a
partir del control Label que viene integrado en
el .Net Framework.
5Control Label Reubicable
- Tambien crearemos una aplicacion para probar
nuestro control personalizado.
6Control Label Reubicable
- Especificaciones
- Primero, se requiere toda la funcionalidad que un
control Label ofrece. Lo que adicionaremos es la
habilidad para poder moverlo en tiempo de
ejecucion. - Regla No. 1, si ya existe un control que posee
mas funcionalidad de la que necesita, herede de
este.
7Control Label Reubicable
- Especificaciones
- Necesitamos mover nuestro control Label cuando el
boton del raton este presionado sobre el. - Necesitamos algun tipo de indicador para mostrar
que nuestro control se puede mover cuando el
cursor este sobre el. - Tambien necesitamos cambiar el cursor cuando el
cursor se encuentre sobre nuestro control para
indicar que se esta en modo movimiento.
8Control Label Reubicable
- Lo primero en nuestra lista es obtener toda la
funcionalidad de un control Label normal dentro
de nuestro control al que bautizaremos con el
nombre de MSNetSVEtiquetaMovil.
9Control MSNetSVEtiquetaMovil
- Para comenzar crearemos un nuevo proyecto
Windows Control Library, y lo llamaremos
Libreria de Controles Moviles MSNetSV. - Cambiamos el nombre a la clase Class1.vb a
MSNetSVEtiquetaMovil.vb
10Control MSNetSVEtiquetaMovil
- Con lo anterior tenemos nuestra libreria para
controles moviles en tiempo de ejecucion. - Si se desean desarrollar mas controles bastaria
con agregar nuevas clases a esta libreria.
11Control MSNetSVEtiquetaMovil
- Antes de comenzar a trabajar con el codigo
necesitamos importar un par de cosas, ya que
estamos trabajando con controles para formularios
Windows, . - El namespace System.Windows.Forms, el cual nos da
acceso al control estandar Label.
12Control MSNetSVEtiquetaMovil
- Ademas para obtener las coordenadas del mouse
pasadas como parametros en los eventos de este,
pasaran como una estructura Point. Asi que se
necesitara el namespace System.Drawing para tener
acceso a la estructura Point.
13Control MSNetSVEtiquetaMovil
- Con las referencias hechas, solamente necesitamos
cambiar un poco el codigo para importar los
namespaces que estos dos archivos exponen, e
indicarle a nuestro control de donde heredara sus
caracteristicas iniciales.
14Control MSNetSVEtiquetaMovil
- Imports System.Windows.Forms
- Imports System.Drawing
- Public Class MSNetSVEtiquetaMovil
- Inherits System.Windows.Forms.Label
- End Class
15Control MSNetSVEtiquetaMovil
- Con esto tenemos una clase que hace exactamente
lo mismo que un control Label normal.
16Control MSNetSVEtiquetaMovil
- Sin embargo no puede ser ejecutado, si se
presiona F5 para ejecutar el proyecto nos lanzara
una excepcion.
17Control MSNetSVEtiquetaMovil
- Debido a lo anterior adicionaremos un proyecto
para poder probar nuestro poderoso control.
18Control MSNetSVEtiquetaMovil
- Agregamos un nuevo proyecto VB.Net Windows
Application y lo llamaremos Prueba Controles
Moviles.
19Control MSNetSVEtiquetaMovil
- Nuestro control debe dar algun tipo de indicacion
al usuario. Debido a que nuestro control tiene
dos estados Estatico y Movil, debemos
indicarle al usuario en que estado esta nuestro
control.
20Control MSNetSVEtiquetaMovil
- MODO MOVIL
- Es aca donde empieza a escribirse codigo.
- Necesitamos agregar soporte a nuestro control
para cambiar el cursor cuando el boton izquierdo
es presionado en nuestro control, y necesitamos
restaurarlo una vez se deje de presionar el boton
del mouse.
21Control MSNetSVEtiquetaMovil
- Esto es facil de manejar debido a que el control
Label ya posee dos eventos MouseDown y MouseUp.
22Control MSNetSVEtiquetaMovil
- Para controlar nuestro cursor adicionaremos un
atributo a nuestra clase. - Private _MiCursor As Cursor
- Public ReadOnly Property MiCursor() As Cursor
- Get
- Return Me._MiCursor
- End Get
- End Property
23Control MSNetSVEtiquetaMovil
- Ahora agregaremos codigo para controlar nuestro
atributo para manejar el estado del cursor.
24Control MSNetSVEtiquetaMovil
Private Sub MSNetSVEtiquetaMovil_MouseDown( _
ByVal sender As Object, _ ByVal e As
System.Windows.Forms.MouseEventArgs) Handles
Me.MouseDown If (e.Button
Windows.Forms.MouseButtons.Left) Then
Me._MiCursor MyBase.Cursor
MyBase.Cursor Cursors.SizeAll End
If End Sub Private Sub MSNetSVEtiquetaMovil_Mouse
Up( _ ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) _ Handles
Me.MouseUp MyBase.Cursor
Me.MiCursor End Sub
25Control MSNetSVEtiquetaMovil
Private _PosicionRelativaDeCursor As Point
Private _Moviendo As Boolean
26Control MSNetSVEtiquetaMovil
Private Sub MSNetSVEtiquetaMovil_MouseDown( _
ByVal sender As Object, _ ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseDown If (e.Button
Windows.Forms.MouseButtons.Left) Then
Me._MiCursor MyBase.Cursor
MyBase.Cursor Cursors.SizeAll '
Me._PosicionRelativaDeCursor
e.Location Me._Moviendo True
End If End Sub
27Control MSNetSVEtiquetaMovil
Private Sub MSNetSVEtiquetaMovil_MouseUp( _
ByVal sender As Object, _ ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseUp _Moviendo False
MyBase.Cursor Me.MiCursor End Sub
28Control MSNetSVEtiquetaMovil
Private Sub MSNetSVEtiquetaMovil_MouseMove( _
ByVal sender As Object, _ ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseMove If (Moviendo) Then
Dim posicionCliente As Point _
MyBase.Parent.PointToClient( _
System.Windows.Forms.Cursor.Position)
Dim ajustarUbicacion As New Point( _
posicionCliente.X - Me._PosicionRelativaDeCursor.X
, _ posicionCliente.Y -
Me._PosicionRelativaDeCursor.Y)
MyBase.Location ajustarUbicacion End
If End Sub