viernes, 22 de julio de 2011

TextEditor

TextEditor
Este control nace a raíz de una pregunta en el foro de Visual Basic .Net, sobre como cambiar el borde de un TextBox a un borde personalizado y además andaba buscando cambiar la apariencia del control NetBarControl para poder aplicarle una nueva propiedad para cambiar el estilo.
ejemplo:
NetBarControlX

Aun que esta imagen solo es un pre-formato de cómo funcionara el control NetBarControl, solo que me distraje creando este nuevo control TextEditor. Así que le echaré mano al terminado este nuevo control.








Bien, la idea inicial era solo agregar botones a un control TextBox, pero luego usando el Mozilla, al descargar unos archivos me percate de un control en la parte inferior de esta venta de descargar, aun que se suele ver mucho en las páginas Web, pero me llamo la atención aquí en el Mozilla y en el Window Live Messenger.
clip_image005
clip_image007
Entonces… me entro el gusano de la curiosidad, agregar la imagen luego de agregar los botones ya no era la parte difícil, la parte curiosa es mostrar el Texto como marca de agua, encontré varios ejemplos en la Red (Internet) pero…. No llenaron mis expectativas ya que estos usan el Paint del Control, funcional, pero!!!!... tiene un cierto parpadeo, cosa que no me gusto, pero esta buena la idea…
Luego… viendo las preguntas del foro, la típica pregunta… un TextBox que solo acepte números… bien, ya había descargado un control de CodeProject que tiene esta funcionalidad, para usarlo en mis desarrollos, pero cuando decidí usarlo, en mi ordenador funciona bien pero ya en el ordenador del cliente me genera una excepción y me vota el sistema “no con esto digo que el control no funcione, funciona pero no tenia tiempo para averiguar cual es el problema ya que mi sistema operativo es Windows Vista y el del cliente es Windows XP, no deberia ser problema, pero me fallo ya en la cancha”, así que revisándolo para ver cómo aplicar esta funcionalidad en mi control, me dije… bueno, voy a escribirlo de cero y voy hacer que trabaje con la configuración regional del Window’s y en lugar de crear varios controles, usar uno solo, así que de aquí nació la idea de agregarla una propiedad más al control la cual es “MaskType” la cual por el momento está limitada a los siguientes tipos: None, Currency, Numeric, Percent e Integer y viendo cómo funcionan otros controles de terceros, veremos si lo volvemos más flexible la parte de el formato a utilizar ya que interna mente usa el formato para cada caso: Currency “C”, Numeric “N”, Percent “P”.
Ahora, hasta donde lo he probado creo que está listo, así que prepare este proyecto de ejemplo para que lo puedan probar y si es de vuestro agrado usarlo en vuestro desarrollo y no está de más que hagan sus comentarios al respecto sobre que mejorar, que agregar o que quitar….

Imagen de ejemplo:
TextEditorDemo
Propiedades
AutoHeight Permite cambia el alto del control, valor predeterminado true
Buttons
Permite agregar y remover los botones que serán mostrados dentro del control TextEditor, tipo de propiedad TextEditorButtonCollection.
EditValue
Propiedad que almacenara el valor sin formato que se mostrara en la propiedad Text ya formateado en los casos de usar MarkType en Currency, Numeric, Percent e Integer.
EnterMoveNextControl
Permite indicar si el foco del control se moverá al siguiente control según el TAB orden al presionar la tecla ENTER, valor predeterminado true.
Image
Permite insertar una imagen que será mostrada dentro del control TextEditor.
ImageAlignment
Indica la posición donde se mostrara la Imagen dentro del Control, valor predeterminado Right
MaskType
Permite indicar el modo de entrada de datos que permitirá el control, valor predeterminado MaskType.None
WaterMarkFont
Permite indicar el tipo de letra que se usara para mostrar el texto como marca de agua.
WaterMarkForecolor Permite indicar el color del texto que se mostrara como marca de agua.
WaterMarkText
Permite indicar el texto que se mostrara como marca de agua.
Enum MaskType
None
Permite una entrada de datos sin restricciones
Currency
Permite una entrada de datos de solo números con un formato de moneda usando el signo de moneda definido en la configuración regional del sistema operativo.
Numeric
Permite una entrada de datos de solo números con un formato de número definido en la configuración regional del sistema operativo.
Percent
Permite una entrada de datos de solo números con un formato de porcentaje definido en la configuración regional del sistema operativo.
Integer
Permite una entrada de datos de solo números sin formato, sin separador de miles y separador de decimales.
Eventos
ButtonClick
Se ejecuta al presionar y soltar el mouse sobre cualquiera de los botones del control TextEditor, recibiendo un argumento del tipo ButtonPressedEventArgs que contiene data relacionada al evento.
Button Provee información relacionada con el botón presionado.
EditValueChanged Se ejecuta al cambiar el valor de la propiedad EditValue.

TextEditorButton

Representa un botón dentro del control TextEditor.
Propiedades
Enabled
Indica si el botones está disponible para interactuar con el usuario, valor predeterminado true
Image
Permite agregar una imagen que será mostrada dentro del botón
IsLeft
Permite indicar si el botón debe mostrarse al lado izquierdo del Control, valor predeterminado false
Tag
Permite agregar información adicional al botón, valor predeterminado null (Nothing en Visual Basic)
Text
Permite agregar un texto que será mostrado dentro del botón
Visible
Permite indicar si el botón esta visible al usuario, valor predeterminado true
Width
Permite indicar el ancho del botón, valor predeterminado -1

Artículos Relacionados:

TextBox con borde personalizado
TextBox con Icon/Imagen
DataGridViewTextEditorColumn