| 5. Creación de las propiedades
del control textbox especial
Ahora vamos adaptar algunas de las propiedades
mas importantes o la que mas utilizamos del TEXTBOX
(OJO: no es obligatoria colocar todas), en nuestro
control nada mas habilitaremos o mostraremos las
propiedades: FONT, FORECOLOR, BACKCOLOR, TEXT,
ALINEACIÓN, ENABLED, LOCKED, MAXLENGHT
y PASSWORDCHAR, para hacer esto introduzca en
la ventana de código del control lo siguiente:
Public Property Get Font() As Font
Set Font = text1.Font
End Property
Public Property Get ForeColor() As OLE_COLOR
ForeColor = text1.ForeColor
End Property
Public Property Get BackColor() As OLE_COLOR
BackColor = text1.BackColor
End Property
Public Property Get Text() As String
Text = text1.Text
End Property
Public Property Get Enabled() As Boolean
Enabled = text1.Enabled
End Property
Public Property Get Locked() As Boolean
Locked = text1.Locked
End Property
Public Property Get MaxLenght() As Integer
MaxLenght = text1.MaxLength
End Property
Public Property Get PasswordChar() As String
PasswordChar = text1.PasswordChar
End Property
Public Property Set Font(ByVal NuevoValor As
Font)
Set text1.Font = NuevoValor
PropertyChanged "Font"
End Property
Public Property Let ForeColor(ByVal NuevoValor
As OLE_COLOR)
text1.ForeColor() = NuevoValor
PropertyChanged "ForeColor"
End Property
Public Property Let BackColor(ByVal NuevoValor
As OLE_COLOR)
text1.BackColor() = NuevoValor
PropertyChanged "BackColor"
End Property
Public Property Let Text(ByVal NuevoValor As
String)
text1.Text = NuevoValor
PropertyChanged "Text"
End Property
Public Property Let Enabled(ByVal NuevoValor
As Boolean)
text1.Enabled = NuevoValor
PropertyChanged "Enabled"
End Property
Public Property Let Locked(ByVal NuevoValor As
Boolean)
text1.Locked = NuevoValor
PropertyChanged "Locked"
End Property
Public Property Let MaxLenght(ByVal NuevoValor
As Integer)
text1.MaxLength = NuevoValor
PropertyChanged "MaxLenght"
End Property
Public Property Let PasswordChar(ByVal NuevoValor
As String)
text1.PasswordChar = NuevoValor
PropertyChanged "PasswordChar"
End Property
NOTA: le recomendaría que guardaran el
proyecto no vaya ser que se vaya la luz y perdamos
todo el tiempo invertido (NO QUEREMOS ESO)
Se deben de estar preguntando ("QUE ES TODO
ESTO"), bueno empecemos la explicación:
Cuando se crean propiedades, se deben de utilizar
lo siguiente:
Property Let
Property Get
Property Let se ejecutara cada vez que nosotros
cambiamos alguna de las propiedades del control
en el formulario del proyecto ya sea a nivel de
diseño o de código.
Property Get se ejecutara cada vez que solicitemos
alguna información de nuestras propiedades
por ejemplo que una variable quiera tomar una
propiedad:
Nombre_Variable = TEXTBOX_ESPECIAL.Text
Por ejemplo voy a explicar una propiedad y la
explicación es lo mismo para todas las
propiedades:
Public Property Get Text() As String
Text = text1.Text
End Property
Public Property Let Text(ByVal NuevoValor As
String)
text1.Text = NuevoValor
PropertyChanged "Text"
End Property
En Property Get lo que hacemos es que cuando
solicitamos información del texto que esta
introducido en el TEXTBOX_ESPECIAL hacemos Text
que es nuestra propiedad igual a Text1.Text, siendo
text1 el control que nosotros colocamos en nuestro
control.
Por ejemplo:
Variable = TEXTBOX_ESPECIAL.text
Cuando hacemos esto, sin darnos cuenta nuestro
control invoca Property get de la propiedad Text
y tomamos el valor el cual seria Text = text1.Text
, y ese valor se le asigna a la variable que lo
invoco en este caso "Variable"
En Property Let lo que hacemos es que cuando
le asignamos un nuevo valor a nuestra propiedad
Text (OJO "NUESTRA PROPIEDAD"), ejemplo:
TEXTBOX_ESPECIAL.text = "HOLA"
Sin darnos cuenta se ejecuta el código
que adentro se encuentre, en este caso le asignamos
al Text1.text = NuevoValor siendo "nuevoValor"
el texto que aparecerá en el control. El
ByVal se debe a que el valor se pasa por copia
y no por Referencia, léanse la ayuda sobre
métodos y Funciones.
Cuando dije (OJO "NUESTRA PROPIEDAD")
quise decir, que nosotros pudimos haber llamado
esa propiedad como nosotros queramos, es decir,
que en ves de llamarlo Text, lo pudiésemos
haber llamado "TEXTO", "CADENA",
"PEPE", "PEPITO", como nosotros
queramos, lo que sucede que para no confundir
a los usuarios que usen el control, respeto ya
el estándar del Textbox existente. Recuerden
no estamos creando desde cero un TEXTBOX, lo que
estamos haciendo es un control que posee un control
TEXTBOX común y silvestre, pero que se
adaptara a nuestra exigencias (En este caso lo
que mencione al principio, un Textbox_Especial
que acepte los caracteres del teclado que nosotros
queramos, ya que el Textbox normal no lo hace
de manera automática)
Si ahora insertan nuestro control en el formulario
con esta modificaciones van a notar en la ventana
propiedades que ahora aparecen MAS PROPIEDADES
QUE ANTES, y que se pueden modificar "MAGNIFICO
NO!!!!" poco a poco aprendemos mas. Anda
cambia la propiedad Text de nuestro control a
nivel de diseño para que vea como cambia
en el formulario.
Ahora vamos a aprender algo más, para
empezar inserten un control TEXTBOX común
y corriente (ES DECIR EL DE VISUAL BASIC) en el
formulario donde estamos trabajando, y en la ventana
propiedades denle Click a la propiedad "Alignment",
verán que se habilita un botón con
una flecha hacia abajo y si le dan click le mostrara
una lista de las opciones posibles; a lo que quiero
llegar es que ustedes se deben de estar preguntando
"COMO SE HACE ESO?" , bueno es fácil
primero en la sección de "Declaraciones",
en la ventana de código (de nuestro control),
insertaremos la declaración de la siguiente
variable:
Enum Tipo_Alineacion
Izquierda = 0
Derecha = 1
Centro = 2
End Enum
Ahora vamos a crear la propiedad de la manera
siguiente:
Public Property Get Alineacion() As Tipo_Alineacion
Alineacion = Text1.Alignment
End Property
Public Property Let Alineacion(ByVal NuevoValor
As Tipo_Alineacion)
Text1.Alignment = NuevoValor
PropertyChanged "Alineacion"
End Property
Si ahora insertan nuestro control con las modificaciones
hechas, en el formulario podrán notar que
añadió una nueva propiedad que se
llama "ALINEACION", y si le dan click
verán el botón de al lado con la
flecha hacia abajo, y si dan click al botón
verán una lista con las opciones disponibles
"INCREÍBLE NO!!!", siempre cuando
ustedes desean mostrar una lista en alguna de
las propiedades usen la declaración ENUM
(VEASE EN LA AYUDA las variables de tipo ENUM).
Algo que se me ha olvidado explicar es el PropertyChanged,
esto se tiene que escribir cuando una propiedad
cambia su estado
Abran notado que todavía no hemos ejecutado
el proyecto, es decir solamente hemos visto nuestro
control a nivel de diseño y no a nivel
de ejecución, bueno ahora vamos a ejecutarlo,
pero primero cambien el color de nuestro control,
al color que ustedes quieran, y en la alineación
coloquen la opción de "CENTRO",
muy bien para ejecutar el proyecto primero debemos
de hacer los siguientes paso dele click a "PROYECTO"
en el menú, luego a "Propiedades del
Proyecto1", en el cuadro de "TIPO DE
PROYECTO", seleccionen "Exe estándar"
y en "OBJETO INICIAL", seleccionen Form1
y luego le dan aceptar.
Bueno, debemos de tener un control con un fondo
que ustedes hayan elegido, con el texto Centrado,
ahora ejecuten el proyecto......................................,
podrán haber notado que tanto el fondo
como la alineación no esta como nosotros
la colocamos en el diseño, es decir, estamos
viendo un fondo blanco, con la alineación
a la izquierda, bueno esto en realidad fue intencional,
por que todavía nos falta echar unas pocas
líneas de código para que funcione.
Cierren el programa en ejecución, y metanse
en el código de nuestro control y añadan
las siguientes líneas:
Private Sub UserControl_WriteProperties(PropBag
As PropertyBag)
On Error Resume Next
Call PropBag.WriteProperty("BackColor",
Text1.BackColor, &H80000005)
Call PropBag.WriteProperty("Font",
Font, Ambient.Font)
Call PropBag.WriteProperty("ForeColor",
Text1.ForeColor, &H80000008)
Call PropBag.WriteProperty("Alineacion",
Text1.Alignment, 0)
Call PropBag.WriteProperty("Enabled",
Text1.Enabled, True)
Call PropBag.WriteProperty("Locked",
Text1.Locked, False)
Call PropBag.WriteProperty("MaxLenght",
Text1.MaxLength, "")
Call PropBag.WriteProperty("PasswordChar",
Text1.PasswordChar, "")
Call PropBag.WriteProperty("Text",
Text1.Text, "")
End Sub
Private Sub UserControl_ReadProperties(PropBag
As PropertyBag)
On Error Resume Next
Set Font = PropBag.ReadProperty("Font",
Ambient.Font)
Text1.ForeColor = PropBag.ReadProperty("ForeColor",
&H80000008)
Text1.BackColor = PropBag.ReadProperty("BackColor",
&H80000005)
Text1.Alignment = PropBag.ReadProperty("Alineacion",
0)
Text1.Enabled = PropBag.ReadProperty("Enabled",
True)
Text1.Locked = PropBag.ReadProperty("Locked",
False)
Text1.MaxLength = PropBag.ReadProperty("MaxLenght",
"")
Text1.PasswordChar = PropBag.ReadProperty("PasswordChar",
"")
Text1.Text = PropBag.ReadProperty("Text",
"")
End Sub
En estos momentos si ustedes estaban confundidos,
o le costaba entender el cómo se hace un
control, deben de estar peor al ver este poco
de líneas que seguro ni entienden por que
la escribieron; bueno para empezar con estos dos
métodos se deben de "MECANIZAR"
que quiero decir con esto, todo control cualquiera
fuera su tipo siempre va a tener estos dos Eventos,
y se usan igual para todos los controles que ustedes
diseñen.
WriteProperties: en este método o evento
declaramos líneas como esta
Call PropBag.WriteProperty("BackColor",
Text1.BackColor, &H80000005)
Donde:
o "BackColor" : es el nombre de la
propiedad.
o "Text1.BackColor", es el nombre
de la propiedad original.
o "&H80000005", es el valor inicial
de esta propiedad o el valor por DEFECTO. (&H80000005
es equivalente en Hexadecimal al color blanco"
Siempre y esto que quede claro cuando ustedes
crean una propiedad tienen que meterla en WritePropery,
no se preocupen por entender "Call PropBag.WriteProperty",
esto no importa lo que si es importa es que sepan
que tienen que poner como primer valor el nombre
de la propiedad, luego el nombre de la propiedad
original, y por ultimo el valor por defecto.
ReadProperty: en este método o evento
declaramos líneas como esta:
Text1.BackColor = PropBag.ReadProperty("BackColor",
&H80000005)
Donde:
o "BackColor" es el nombre de la propiedad
de nuestro control.
o Y &H80000005 es el valor por defecto Noten
que estamos haciendo Text1.BackColor (nombre de
la propiedad del Texbox que estamos usando en
nuestro control) = PropBag.ReadProperty("BackColor",
&H80000005)
Al igual que WriteProperty, no se preocupen de
buscar el "POR QUE HACEMOS ESTO", lo
que importa es que cuando añadan una nueva
propiedad en Readproperty tienes que poner el
nombre de la propiedad a utilizar (En este caso
Text1.BackColor) igual a Propbag.ReadProperty(Nombre_de_la
propiedad_nuestra, valor original o por defecto).
Esta parte reconozco que es un poco complicada
de entender, por eso mencione que para estos dos
métodos MECANÍCENSE, no lo busquen
el por que, tan sencillamente háganlo de
esa manera, si desean averiguar sobre estos Eventos
(Vean en la ayuda de MSDN de Microsoft)
Ahora, vamos al formulario del proyecto, quiten
el control viejo y vuelvan a insertar nuestro
control con los nuevos cambios, verán que
tanto físicamente como en las propiedades
no ha cambiado, pero ahora, cámbienle el
color y la alineación póngala centrada
y ejecuten............................... habrán
notado que ya el color y la alineación
se mantienen ¡QUE BUENO!, pera que vean
lo poderosas con son esas instrucciones.
>> Ver
siguiente capitulo
|