TextBox con formato Algunas de las cosas más interesantes que encontré a la hora de programar con .NET fueron la flexibilidad y enorme transparencia de su biblioteca de clases. Esto nos abre un abanico de posibilidades verdaderamente inmenso, sobre todo si lo comparamos con las versiones anteriores de Visual Basic. Ciertamente se puede trabajar en .NET igual que se hacía antes en VB, programando las respuestas correspondientes a los eventos que iban sucediendo. Sin embargo, y aquí está la gran ventaja, también podemos ahorrarnos gran parte del trabajo si ajustamos el comportamiento de los controles a nuestras necesidades, evitando así tener que programar procedimientos de evento una y otra vez en infinidad de ventanas y aplicaciones. Esto es exactamente lo que hemos pretendido con el control FormattedTextBox. Está heredado del control TextBox de la biblioteca de clases de .NET, con lo cual incorporamos todos sus miembros sin necesidad de volver a programarlos, y después le añadimos nuevos métodos y propiedades y modificamos aquellos de la clase base cuyo comportamiento vamos a cambiar para ajustar el control a nuestras necesidades. La idea es tener un control TextBox que permita al usuario definir distintos formatos de entrada sin necesidad de que este tenga que manejar el evento KeyPress para controlar si la tecla pulsada es válida o no lo es. Lo mejor es programar este control en una biblioteca de clases para que sea reutilizable en todas nuestras aplicaciones hechas en .NET. Estas son las características nuevas del control FormattedTextBox: Propiedades nuevas: Format: que sirve para especificar el formato de entrada en la caja de texto. Los formatos que acepta están enumerados y son los siguientes: SpacedAlphaNumeric: Acepta todos los caracteres y, por lo tanto, se comporta igual que un TextBox normal. Este es el formato por defecto. NoSpacedAlphaNumeric: Acepta todos los caracteres a excepción del espacio.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
TextBox con formato
Algunas de las cosas más interesantes que encontré a la hora de programar con .NET fueron la flexibilidad y enorme transparencia de su biblioteca de clases. Esto nos abre un abanico de posibilidades verdaderamente inmenso, sobre todo si lo comparamos con las versiones anteriores de Visual Basic.
Ciertamente se puede trabajar en .NET igual que se hacía antes en VB, programando las respuestas correspondientes a los eventos que iban sucediendo. Sin embargo, y aquí está la gran ventaja, también podemos ahorrarnos gran parte del trabajo si ajustamos el comportamiento de los controles a nuestras necesidades, evitando así tener que programar procedimientos de evento una y otra vez en infinidad de ventanas y aplicaciones.
Esto es exactamente lo que hemos pretendido con el control FormattedTextBox. Está heredado del control TextBox de la biblioteca de clases de .NET, con lo cual incorporamos todos sus miembros sin necesidad de volver a programarlos, y después le añadimos nuevos métodos y propiedades y modificamos aquellos de la clase base cuyo comportamiento vamos a cambiar para ajustar el control a nuestras necesidades.
La idea es tener un control TextBox que permita al usuario definir distintos formatos de entrada sin necesidad de que este tenga que manejar el evento KeyPress para controlar si la tecla pulsada es válida o no lo es. Lo mejor es programar este control en una biblioteca de clases para que sea reutilizable en todas nuestras aplicaciones hechas en .NET. Estas son las características nuevas del control FormattedTextBox:
Propiedades nuevas:
Format: que sirve para especificar el formato de entrada en la caja de texto. Los formatos que acepta están enumerados y son los siguientes:
SpacedAlphaNumeric: Acepta todos los caracteres y, por lo tanto, se comporta igual que un TextBox normal. Este es el formato por defecto.
NoSpacedAlphaNumeric: Acepta todos los caracteres a excepción del espacio.
SpacedAlphabetic: Acepta solamente letras mayúsculas y minúsculas y el espacio. No acepta números, ni signos.
NoSpacedAlphabetic: Acepta solamente letras mayúsculas y minúsculas.
UnsignedNumber: Acepta solamente números enteros sin signo.
SignedNumber: Acepta números enteros con signo. El signo solamente puede ser - (si no se pone se asume que es positivo), y únicamente puede ponerse al principio.
UnsignedFloatingPointNumber: Acepta números decimales sin signo con coma decimal flotante. Obviamente, solo se puede poner una coma. En caso de que hubiera una escrita no permite escribir otra hasta que la anterior sea borrada.
SignedFloatingPointNumber: Igual que el anterior, pero además acepta el signo - únicamente si se pone al principio.
UnsignedFixedPointNumber: Acepta números decimales sin signo con coma decimal fija. El número de decimales que se admitirán se debe especificar en la propiedad Decimals.
SignedFixedPointNumber: Igual que el anterior, pero además acepta el signo - únicamente si se pone al principio.
HexadecNumber: Acepta números en formato hexadecimal, es decir, en base 16.
OctalNumber: Acepta números en formato octal, es decir, en base 8.
BynaryNumber: Acepta números en formato binario, es decir, en base 2.
UserDefined: Acepta solamente los dígitos especificados en la propiedad UserValues.
Decimals: Sirve para especificar el número de decimales. Solamente para los formatos UnsignedFixedPointNumber y SignedFixedPointNumber.
DecSeparator: Sirve para especificar el carácter que se usará como separador decimal. Solo admite el punto o la coma.
UserValues: Sirve para especificar la cadena de caracteres de entrada válidos cuando la propiedad Format sea UserDefined.
Métodos nuevos:
ToDouble(): Devuelve el contenido de la caja de texto como un valor de tipo double considerando el formato actual del control, es decir, si se está usando HexadecNumber, el método lo pasa a base decimal y después lo convierte a double. Si no se puede convertir retorna 0.
ToInt64(): Devuelve el contenido de la caja de texto como un valor de tipo long considerando el formato actual del control. Si no se puede convertir retorna 0.
ToHexadecimal(): Devuelve una cadena con el número contenido en la caja de texto en formato hexadecimal considerando el formato actual del control.
ToOctal(): Devuelve una cadena con el número contenido en la caja de texto en formato octal considerando el formato actual del control.
ToBynary(): Devuelve una cadena con el número contenido en la caja de texto en formato binario considerando el formato actual del control.
Miembros sobreescritos (override) de la clase base:
Propiedad Text: Lógicamente, cuando se intente asignar control.Text="algo", habrá que filtrar la cadena, aceptando únicamente los caracteres que sean válidos según el formato que se esté utilizando.
Método WndProc: Este es el método que se ocupa de gestionar los mensajes de Windows. Los mensajes producidos por un carácter no válido deben ser ignorados. Así, evitamos también que estos caracteres que no son válidos provoquen la ejecución del evento KeyPress. Ahora bien, si queremos que todos los caracteres (incluidos aquellos que no son válidos para el formato actual) generen el evento KeyPress bastaría con haber sobreescrito el método DefWndProc en lugar de este.
Bien este el el código (en C#) del control FormattedTextBox:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace TextBoxConFormato
{
#region Enumeración de formatos
/// <summary>
/// Listado de todos los formatos que es capaz de gestionar la
/// caja de texto
/// </summary>
public enum tbFormats
{
/// <summary>
/// Todos los caracteres y números con espacios. Valor por
/// defecto de la propiedad Format
/// </summary>
SpacedAlphaNumeric,
/// <summary>
/// Todos los caracteres y números sin espacios
/// </summary>
NoSpacedAlphaNumeric,
/// <summary>
/// Sólo las letras con espacios
/// </summary>
SpacedAlphabetic,
/// <summary>
/// Sólo las letras sin espacios
/// </summary>
NoSpacedAlphabetic,
/// <summary>
/// Sólo números enteros sin signo
/// </summary>
UnsignedNumber,
/// <summary>
/// Sólo números enteros con signo
/// </summary>
SignedNumber,
/// <summary>
/// Sólo números con coma decimal flotante sin signo
/// </summary>
UnsignedFloatingPointNumber,
/// <summary>
/// Sólo números con coma decimal flotante con signo
/// </summary>
SignedFloatingPointNumber,
/// <summary>
/// Sólo números con coma decimal fija sin signo. El número
/// de decimales se debe especificar en la propiedad Decimals
/// </summary>
UnsignedFixedPointNumber,
/// <summary>
/// Sólo números con coma decimal fija con signo. El número
/// de decimales se debe especificar en la propiedad Decimals
/// </summary>
SignedFixedPointNumber,
/// <summary>
/// Sólo números en formato hexadecimal
/// </summary>
HexadecNumber,
/// <summary>
/// Sólo números en formato octal
/// </summary>
OctalNumber,
/// <summary>
/// Sólo números en formato binario
/// </summary>
BynaryNumber,
/// <summary>
/// Definido por usuario
/// </summary>
UserDefined
}
#endregion
/// <summary>
/// Caja de texto que permite el control automáto del formato
/// de entrada del texto
/// </summary>
public class FormattedTextBox : System.Windows.Forms.TextBox