Ir al contenido principal

TextBox con Borde Personalizado

Bien, retomando nuevamente mi blog, luego de tanto tiempo ausente, veremos como personalizar el borde del control TextBox con un color diferente.

hace poco vi en los foros de MSDN, en el foro de VB.Net esta pregunta, ¿Cómo puedo cambiar el color del borde de un control TextBox?, anteriormente también se hizo la misma pregunta en este mismo foro donde yo respondí como hacerlo VB2010 4.0 - Como crear un textbox personalizado.

no hay manera fácil de personalizar un control, generalmente se tiene que sobre escribir el evento WndProc para escuchar los mensajes de window y reemplazar la funcionalidad de estos según sea la necesidad o el control.

bien, para cambiar el color del borde del control TextBox sin mucha funcionalidad, se debe de escuchar y reemplazar el funcionamiento de los mensajes WM_PAINT y WM_NCPAINT. ¿Porque WM_PAINT?, porque cuando cambiamos la propiedad BorderStyle de este control a FixedSingle, quien pinta el borde es el mensaje WM_PAINT no asi el WM_NCPAINT.

Para la demostración creare una clase que herede de TextBox la cual llamaremos TextBoxEx, ademas, agregare una nueva propiedad que llamare "BorderColor" con la cual indicaremos el color que tendrá el borde de este control. Cuando esta propiedad este en su valor predeterminado "Empty", el control pintara su borde.

Vista preliminar:
Ademas, se hace uso de algunas API de Windows, usadas en el mensaje WM_NCPAINT.

GetDCEx
ReleaseDC
ExcludeClipRect
GetWindowRect
RedrawWindow

Descargar proyectos tipo Librería:
VB.Windows.Forms.ControlExt.Zip
CSharp.Windows.Forms.ControlExt.Rar

Espero sea de mucha ayuda y aprendizaje el artículo.

Artículos relacionados:

TextBox con Icon/Image
Nullable DateTimePicker


Comentarios

  1. Hola. Quiero hacer lo mismo para un toolstriptextbox o toolstripcombobox para añadirlo a mi bindingnavigator, Tomando tu codigo de ejemplo se podria hacer que heredase en lugar de textbox de toolstriptextbox? lo he intentado pero me sale una serie de errores, tales como que WndProc no es um miembro de System.WIndows.Forms.ToolStripTextBox. Alguna sugerencia?
    Gracias

    ResponderEliminar
  2. en fin como le agregar el color al borde y la imagen en todo caso e intentado en las propiedades del control y nada no encuantro nada

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

NetBarControl

Actualización.
NetBarControl - Description Item Style (New)




NetBarControl (Outlook Bar) es uno de los controles que muchas veces buscamos para usar en nuestras aplicaciones, pero siempre encontramos en internet versiones pagables y tal vez no contamos con el presupuesto esperado como para comprar uno y las versiones gratis que se logran encontrar, pues como son gratis no implementan en su totalidad la funcionalidad que esperamos encontrar en un control de este tipo. Antes de comenzar a escribir este control dedique tiempo en buscar uno por internet que tuviera toda la funcionalidad o por lo menos una interfaz disponible en modo de diseño, pero, no logre encontrar uno, así que me propuse crearlo como a mí me gustaría que funcionara uno gratis y al final llegue a la conclusión de ¿Porque no hay uno completo, gratis y que incluya el código fuente? y la respuesta es:No es fácil, pero tampoco es cosa de otro mundo. Con esto no digo que otro programador no lo pueda hacer o que los ejemplos en…

ComboBox-MultiColumns

ComboBox-MultiColumns Update


Como bien sabemos el Set de Controles de Windows de .Net Framework incluye el control ComboBox pero este no soporta mostrar multiples columnas, en su lugar muestra una lista simple ya sea agregada manual mente usando la propiedad Items o según el origen de datos definido a traves de la propiedad DataSource, usando la propiedad DisplayMember para indicar la propiedad o campo a mostrar en la lista desplegable. Bien… la ventaja de los controles de .Net Framework es que los podes extender para mejorar su uso en nuestros desarrollos, en este caso extenderemos el Control ComboBox para reemplazar la lista desplegable por nuestra propia versión que mostrara “N” cantidad de columnas que necesitemos, para esto haremos uso de las siguientes clases ToolStripDropDown y ToolStripControlHost. En la ayuda de MSDN podemos encontrar un ejemplo sobre como usar la clase ToolStripDropDown para mostrar un TreeView. parte de este ejemplo lo he tomado para crear este Control ComboBo…

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:


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.


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, enco…