Evento TextChange para todos los cuadros de texto en Winform.
El NumTextBox reescrito con el control TextBox implementa principalmente la función de permitir solo la entrada de números, o para cadena, numérico, moneda, decimal, flotante, double, Short, int, long, etc. agregue un atributo, que se puede configurar usando InputType, o puede expandirlo aún más usted mismo porque es de código abierto. Enumeración pública NumTextBoxType
{
Cuando String, // es esto, no se realiza ningún procesamiento, como un TextBox normal.
Valor, // siempre que sea un número.
Moneda,
Decimal,
Flotante,
Doble,
Corto,
Int,
Largo
}Código principal:
Usar el sistema;
Usar el sistema. Windows Forms
Usa el sistema. Modelo de componentes;
Utilizar el sistema. Texto .Expresión regular;
Espacio de nombres YongFa365. Control. NumTextBox
{
Clase pública NumTextBox: TextBox
{
tipo de entrada de tipo numtextbox privado = tipo de numtextbox. Número;
Enumeración pública NumTextBoxType
{
Cuando String, // es esto, no se realiza ningún procesamiento, como un TextBox normal.
Valor, // siempre que sea un número.
Moneda,
Decimal,
Flotante,
Doble,
Corto,
Int,
Long
}
Public NumTextBox()
{
Esto. menú contextual = nuevo menú contextual();
}
[
Categoría ("Configuración especial"),
DefaultValue(NumTextBoxType .Numeric),
Descripción("Establecer tipo permitido: \nLa cadena es la misma que la función TextBox normal\nNumeric, siempre que sea un número")
] p>
NumTextBoxType público tipo de entrada
{
obtener { return tipo de entrada}
establecer { tipo de entrada = valor}
}
texto de cadena de anulación pública
{
get{ base de retorno. texto;}
Configuración
{
if (IsValid(valor, verdadero))
{
base. texto = valor;
}
}
}
Booleano privado válido (valor de cadena, booleano usado) p>
{
bool ret = true
if(String.
IsNullOrEmpty(val))
{
return ret
}
if (uso)
{
if (val. es igual a ("-" amp; ampinputType! = NumTextBoxType. número)
{
return ret
}
}
Prueba
{
Cambiar (tipo de entrada)
{
case NumTextBoxType. cadena:
break;
case NumTextBoxType.number:
if (!regex.ismat(var,@" ^\d*$) ”)
{
ret = false
}
Break;
case NumTextBoxType Moneda:
decimal dec = decimal.
int pos = val.
if (pos! = -1)
{
ret = val. longitud lt = 3;
}
Break;
case NumTextBoxType.float:
float flt = float.
Break;
case NumTextBoxType double:
double dbl = double
break; p>case decimal:
decimal dec2 = decimal. parse(val);
Break;
case NumTextBoxType short:
corto s = corto. /p>
Romper;
case Int:
int i = int;
Romper;
case NumTextBoxType.long:
long l = long.parse(val);
break;
Predeterminado:
Lanzar nuevo excepción de aplicación();
}
}
Catch
{
ret = false
}
Devolver ret
}
Proceso bool de anulación protegido CmdKey (mensaje de referencia msj, Keys keyData)
{
if (keyData == tecla de método abreviado (Teclas). ctrl LV | | keyData = =(Teclas) teclas de método abreviado. ShiftIns)
{
IDaObject iData = Portapapeles. obtener objeto de datos();
Cadena nuevoTexto
nuevoTexto = base. Text.Substring(0, base. Seleccione Inicio)
(Cadena)iData. GetData(formato de datos. Texto)
Base. Texto.Subcadena(base.
Elija Iniciar básico. longitud de selección);
if (!IsValid(newText, true))
{
Devuelve verdadero
}
}
Regreso a la base. ProcessCmdKey(ref msg, key data);
}
Anulación protegida void OnLeave(EventArgs e)
{
If (! (inputType == NumTextBoxType. numérico | | tipo de entrada == numtextbox tipo. String))
{
if (base. text! = "")
{
If (!IsValid(base.Text, false))
{
Base. Texto =
}
else if (Double. parse(base.Text) == 0)
{
base. Texto = " 0
}
}
}
Base.en licencia(e);
}
Anulación protegida anulada al presionar una tecla (keypress eventargs e)
{
if (inputType!= NumTextBoxType.String)
{
char c = e . KeyChar
if (! Char. Control del sistema de información (c))
{
if (c) .ToString() == " ")
{
e.Processed=True;
Retorno;
}
string newText = base. Text.Substring(0, base. inicio de selección)
c.ToString() base de selección. !IsValid(newText, true))
{
e.processed=true;
}
}
}
Base (e);
}
}
}