Solución del ejercicio del Ejemplo 3
El ejercicio propuesto era agregar una nueva propiedad a nuestra clase TextBoxNum, dicha propiedad admitirá sólo valores booleanos, por tanto el tipo de la propiedad será del tipo de datos bool. Como en todas las propiedades, siempre (o casi siempre) necesitaremos una variable que conserve el valor, por tanto necesitaremos una variable privada del mismo tipo que la propiedad. El "casi siempre" es para los casos en los que se usa la clase base, tal como vimos en el código del control.
Veamos el código y las modificaciones que habría que hacer al que ya teníamos escrito. De éste último sólo tendremos que modificar la función que comprueba si el carácter se admite o no, y ahí comprobaremos si no admitimos decimales, en ese caso, no aceptaremos ni el punto ni la coma.La declaración de la nueva propiedad ConDecimales y la variable privada, cuyo valor inicial será true para que en principio (o por defecto) admita decimales.
// Propiedad para indicar si se admiten o no decimales // // variable privada para contener el valor de la propiedad bool mConDecimales = true; // // la declaramos virtual por si alguien quiere reemplazarla public virtual bool ConDecimales { get { return mConDecimales; } set { mConDecimales = value; } }La propiedad la declaramos public para que sea accesible externamente y virtual para dar la opción a quién quiera usar nuestra clase como clase base para crear su propia versión.
Ahora veamos los cambios a realizar al método CaracterCorrecto para que tenga en cuenta la nueva propiedad, el resto del código sigue siendo el mismo que teníamos originalmente.
// esta función permite controlar si el carácter es de los admitidos protected virtual bool CaracterCorrecto(char c) { // si ConDecimales = false, // no admitir ni el punto ni la coma if( ConDecimales == false ) if( c == '.' || c == ',' ) return false; // devolverá true si el carácter está en el array return (Array.IndexOf(digitos, c) != -1); }Una vez que hayamos hecho estos cambios, podemos generar (o compilar) la librería para poder usarla en el formulario de prueba.
Nota:
Si quieres que se muestre una descripción de la propiedad ConDecimales en la ventana de propiedades, tendrás que agregar una importación del espacio de nombres System.ComponentModel y aplicar el atributo Description a la propiedad:[Description("Indica si se admitirá decimales o no")]
public virtual bool ConDecimales
{