.NET Personalizar controles I (extender controles)

Quien de ustedes no esta de acuerdo como es que funcionan los controles de .NET, en especial si vienes de Visual Foxpro, lo que mas extranhas son los textbox y sus formatos, la simplicidad de uso y su funcionalidad, ni siquiera MaskedTextbox implementa la simplicidad de este control en VFP y ni hablar de los combos.

Bien lo que voy a intentar hacer es : extender el control TextBox basico de .NET y convertirlo en algo que me sirva.

Primero entendamos que extender controles no se hace de forma visual, para ello lo primero que hacemos es crear un proyecto nuevo de tipo “Biblioteca de clases” (si es esta y no la de “Biblioeca de controles de Windows”) luego si quisieras extender una clase base de .NET se tiene que heredar dicha clase, asi que anhadimos una nueva clase y le ponemos un nombre en mi caso le voy a poner xmeeleTextBox y para hacer que herede de TextBox pues le ponemos esto:

public class xmeeleTextox: TextBox

Ya ahora unas cosas antes de empezar, si quieres que tus propiedades que definas se muesstraen en el explorador de Propiedades de VS, debes de poner tres cosas:

[Description(“Auto selecciona el contenido”)]: Descripcion de la propiedad.
[Category(“AutoSeleccionar”)]: Catgoria en la que se a mostrar
[ Browsable(true)]: SI se muestra en el explorador de propiedades.

Estos tres antes de la especificacion Get/set de tu propiedad.

Tambien debes de definir enumaraciones para llenar las opciones de tu propiedad, en mi caso yo quiero que el combo en su propiedad Tipo me muestre una lista asi que defino esta enumeracion:

public enum formatos
    {
        Texto,
        Fecha,
        DateTime,
        Entero,
        Decimal,
        Moneda
    }

Que me va a servir para determinar el tipo de valodacion que voy a realizar:

Ya hora como es que se implemneta nuevas funcionalidades a un control, digamos que quiero que siempre que se pase el control al objeto este autoseleccione el texto que tiene escrito, pues vamos a sobre escribor los eventos en este caso sobreescribire el evento OnENter, aqui voy a pegar todo el evento como lo tengo programado para realizar las validaciones de tipo.

A modo de curiosidad para hacer es switch de la enumeracion Formato lo que hice es insertar el codigo mediante el snipper (boton derecho en el codgo y luego insertar fracmento de codigo y alli c# y luego switch) luego le puse Formato en el parentesis y me creo los casos automaticamente.🙂

       protected override void OnEnter(EventArgs e)
        {
            base.OnEnter(e);
            if(this.autoselect)
                this.Select(0, this.Text.Length);
            else
                this.Select(0, 0);
            switch (formato)
            {
                case formatos.Texto:
                    break;
                case formatos.Fecha:
                    switch (ffecha)
                    {
                        case fFechas.ddmmyy:
                            this.MaxLength = 8;
                            if (this.Text.Length == 0 && formato == formatos.Fecha)
                            {
                                this.Text = ”  ” + separafecha + ”  ” + separafecha + ”  “;
                            }
                            break;
                        case fFechas.yymmdd:
                            this.MaxLength = 8;
                            if (this.Text.Length == 0 && formato == formatos.Fecha)
                            {
                                this.Text = ”  ” + separafecha + ”  ” + separafecha + ”  “;
                            }
                            break;
                        case fFechas.yyyymmdd:
                            this.MaxLength = 10;
                            if (this.Text.Length == 0 && formato == formatos.Fecha)
                            {
                                this.Text = ”    ” + separafecha + ”  ” + separafecha + ”  “;
                            }
                            break;
                        case fFechas.ddmmyyyy:
                            this.MaxLength = 10;
                            if (this.Text.Length == 0 && formato == formatos.Fecha)
                            {
                                this.Text = ”  ” + separafecha + ”  ” + separafecha + ”    “;
                            }
                            break;
                        default:
                            break;
                    }
                    break;
                case formatos.DateTime:
                    break;
                case formatos.Entero:
                    break;
                case formatos.Decimal:
                    break;
                case formatos.Moneda:
                    if (this.Text.Length > 0)
                    {
                        if (!this.Text.Substring(0, simbMoneda.Length).Equals(simbMoneda))
                        {
                            string anterior = this.Text;
                            this.Text = simbMoneda + anterior;
                            this.Select(simbMoneda.Length, this.Text.Length);
                        }
                        else
                        {
                            this.Select(simbMoneda.Length, this.Text.Length);
                        }
                    }
                    else
                    {
                        this.Text = simbMoneda+”  “;
                        this.Select(simbMoneda.Length , this.Text.Length);
                    }
                       
                    break;
                default:
                    break;
            }
           
           
        }

 En el caso de fecha, he definido dos propiedades mas una llamada ffecha que es una enumeracion con los formatos que acepto para fechas:

 public enum fFechas
    {
        ddmmyy,
        yymmdd,
        yyyymmdd,
        ddmmyyyy
    }
y otra que es el separador de fechas que e un caracter que  vendria a ser quien separa la fecha (“.”,”-“,”/”, etc.)

En el caso del tipo moneda el comportamiento que deseo obtener es el siguiente, dado una cadena que indica la abreviatura de la moneda en que se esta trabajando, siempre el control muestre dicha abreviatura y que por defecto permita escribir siempre despues de dicha cadena y que cuando el control reciba el foco, pues solo seleccione la parte que va despues de la abreviatura.

Bueno hasta aqui la parte uno, no dejo archivo de recuros de descarga pues aun estoy extendiendo mas la clase esta asi que apenas la termine pongo la segunda parte.

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , , , ,
Publicado en c#

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,137 hits
A %d blogueros les gusta esto: