none
TextBox, seleccionar y editar RRS feed

  • Pregunta

  • Hola

    Trabajo en Windows Forms, C#

    Tengo un control TextBox en el cual selecciono por código un texto pero al momento de escribir lo seleccionado debe de borrarse e ingresar lo que estoy digitando.

    Acá solo selecciono el texto que esta dentro del TextBox

    if (e.KeyData == (Keys.R | Keys.Alt))
                {
                    if (!string.IsNullOrEmpty(txtDineroRecibido.Text))
                    {
                        txtDineroRecibido.Focus();
                        txtDineroRecibido.SelectionStart = 0;
                        txtDineroRecibido.SelectionLength = txtDineroRecibido.Text.Length;
                        e.Handled = true;
                    }
                }

    Para comenzar el TextBox que utilizo es uno personalizado, muestro el código, pero en mi caso uso la opción Numeric

    protected override void OnKeyPress(KeyPressEventArgs e)
            {
                base.OnKeyPress(e);
    
                switch (TipoValidacion)
                {
                    case TipoDato.AlfaNumerico:
                        break;
                    case TipoDato.Enteros:
                        if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                        {
                            e.Handled = true; // Rechazar el carácter
                            return;
                        }
                        break;
                    case TipoDato.Letras:
                        if (!Char.IsLetter(e.KeyChar) &&
                            !Char.IsControl(e.KeyChar) &&
                            !Char.IsSeparator(e.KeyChar))
                        {
                            e.Handled = true;
                            return;
                        }
    
                        break;
                    case TipoDato.Numeric:
                        //verificar si el textbox contiene el caracter punto y actualizar nuestra variable a true si ya se tiene un punto
                        if (this.Text.Contains(".") == true)
                            punto = true;
                        else
                            punto = false;
    
                        //permitir solo los caracteres de digitos y punto
                        // e.KeyChar == (char)Keys.Home
                        if (char.IsDigit(e.KeyChar) || e.KeyChar == '.')
                        {
                            //validar si el usuario esta ingresando el caracter (punto)
                            if (e.KeyChar == '.')
                            {
                                //limitar el numero de puntos en el textbox
                                if (punto)
                                {
                                    e.Handled = true;// si ya existe un punto, bloquear el caracter
                                    return;
                                }
                                //si no existe ningun punto en el textbox, permitir el caracter
                                punto = true;
    
                            }
    
                            //si el caracter es un digito
                            //comprobar que el cuadro de texto cumpla con la expresion regular:
                            //0 a n digitos(punto)n numero de decimales
                            //si cumple con la expresion, permitir el digito ingresado
                            if (Regex.IsMatch(this.Text, @"^\d*\.\d{" + decimales + "}$")) e.Handled = true;
                        }
                        else
                        {
                            //si es tecla de control especial, permitirla
                            if (!Char.IsControl(e.KeyChar))
                            {
                                e.Handled = true;
                                return;
                            }
                        }
                        break;
                    case TipoDato.Fecha:
                        if ((int)e.KeyChar == (int)Keys.Divide)
                        {
                            e.Handled = true;
                            return;
                        }
                        if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) && (e.KeyChar != '/'))
                        {
                            e.Handled = true;
                            return;
                        }
    
                        break;
                }
            }

    Como les dije lineas arriba estoy usando la opción Numeric del case. No se porque motivo cuando selecciono el texto que es 0.00 por la combinación de teclas y presiono por ejemplo algún número no lo ingresa, solo cuando esta seleccionado y presiono la tecla retroceso(manualmente)

    A modo de prueba en evento Keypress del TextBox puse la siguiente instrucción 

    private void TxtDineroRecibido_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((char.IsNumber(e.KeyChar)))
                {
                    MessageBox.Show(txtDineroRecibido.Text);
                    e.Handled = true;
                    return;
                }
            }

    Al depurar ingresa a la condición pero me manda el mensaje con 0.00, eso quiere decir que el TextBox no esta en modo de edición o algo parecido, ¿Que puedo hacer?

    Pedro Ávila

    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    miércoles, 12 de junio de 2019 17:55

Respuestas

  • Hola. Es complicado verlo. Te propongo poner puntos de ruptura y seguir paso a paso la ejecución del código. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 14 de junio de 2019 14:28
    Moderador
  • Hola Pedro Ávila

    Gracias por levantar tu consulta en los foros de MSDN de Microsoft, con respecto a la misma te recomiendo ir al siguiente enlace en el cual consiste en documentación oficial de Microsoft sobre los eventos de TextBox, mismos que pueden serte útiles para la solución del código que nos estás presentando. 

    https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netframework-4.8

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

     

    jueves, 13 de junio de 2019 16:42
    Moderador

Todas las respuestas

  • Hola Pedro Ávila

    Gracias por levantar tu consulta en los foros de MSDN de Microsoft, con respecto a la misma te recomiendo ir al siguiente enlace en el cual consiste en documentación oficial de Microsoft sobre los eventos de TextBox, mismos que pueden serte útiles para la solución del código que nos estás presentando. 

    https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.textbox?view=netframework-4.8

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

     

    jueves, 13 de junio de 2019 16:42
    Moderador
  • Hola @Pablo Rubio

    Gracias por tu tiempo.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 13 de junio de 2019 18:18
  • Hola. Es complicado verlo. Te propongo poner puntos de ruptura y seguir paso a paso la ejecución del código. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 14 de junio de 2019 14:28
    Moderador