none
VALIDAR COMA(,) EN CAJA DE TEXTO

    Pregunta

  •  Holaaaa, necesito saber como puedo validar la coma(,) en un text box, tengo lo que es este codigo y solamente me permite ingresar numeros y comas, ahora el problema esque puedo ingresar varias comas y solamente para mi aplicacion necesito 1 coma (,) ...

    private void txtMonedas_KeyPress(object,KeyPressEventArgs e)
    {
       if((e.KeyChar>=48 && e.KeyChar<=57) || e.KeyChar==8 || e.KeyChar==44)
         {
             e.Handled=false;
          }
      else
        {
            e.handled=true;
        }
    }
    

     
    AYUDAAA!!!

    GRACIASSS!


    Samir Eduardo A.A
    sábado, 15 de octubre de 2011 18:58

Respuestas

  • hola

    porque no usas el control

    MaskedEditTextbox

    con este podrias definir uan mascara donde determines en que lugar colocar los decimales, creoq uee s mas practico que escribir codigo de validacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Zamm92 sábado, 15 de octubre de 2011 19:42
    sábado, 15 de octubre de 2011 19:36

Todas las respuestas

  • ¿Qué lo hizo preguntar esto en un foro de SQL Server?

    En fin:  Lo que plantea es sencillo.  Una variable booleana a nivel de clase que pasa a true cuando la primera coma se inserta.  El código entonces se modifica para probar esta variable booleana:  Si es false, se permite la coma y se pasa la variable a true; si la variable ya es true, entonces no se permiten más comas.


    Jose R. MCP
    sábado, 15 de octubre de 2011 19:14
  • Lo siento sq lo hice demasiado rapito, y ahora como lo borro?

    xD

    Gracias


    Samir Eduardo A.A
    sábado, 15 de octubre de 2011 19:23
  • hola

    porque no usas el control

    MaskedEditTextbox

    con este podrias definir uan mascara donde determines en que lugar colocar los decimales, creoq uee s mas practico que escribir codigo de validacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Zamm92 sábado, 15 de octubre de 2011 19:42
    sábado, 15 de octubre de 2011 19:36
  • GRACIAS LEANDRO! estas en todas eh!(Y) gracias por tu aporteee! y si! mejor es utilizar el control MaskedEditTextbox y ahorrarme codigo, gracias gracias ^^


    Samir Eduardo A.A
    sábado, 15 de octubre de 2011 19:42
  • Hola, disculpa por molestarte...

    tengo lo que es un error; te explico lo que hice...

    *tengo lo que es un 4 cajas de texto (de tipo MaskedEditTexbox  )
       ***(txtCantidad 'por defecto 1__',
       ***txtMonto 'por defecto 00000.00 (deacuedo a mi mascara del MaskedEditTexbox (99999.00)) ' ,
       ***txtContribucionInicial 'por defecto 00000.00' ,
       ***txtRestante 'por defecto 00000.00' )

    *en la caja txtMonto se carga desde mi SQL   pongamosle 10.00 y el campo es de tipo decimal(6,2) , y me carga de esta manera 1000_.__ y no deberia cargarme de esa manera, deberia cargarme asiii  00010.00   ..

    todo es en el evento MaskInputReject .


    Samir Eduardo A.A
    sábado, 15 de octubre de 2011 20:57
  • Hola Samir,

    No tienes un error, tienes un verdadero problema por utilizar MaskedTextBox. El problema que tienes es que para que funcione correcto tienes que pasar la misma longitud de caracteres que tenga la mascara de lo contrario no funciona y tiene el comportamiento que tu estás diciendo.

    Si no te quieres complicar la cabeza puedes hacer esto, fijate en estos ejemplos.

    1. Tiene el mismo comportamiento que tu expones y no funciona.

    Decimal valor = 10.50M;           
    this.maskedTextBox1.Text = valor.ToString();
    

    2. Funciona correctamente

    Decimal valor = 10.50M;           
    this.maskedTextBox1.Text = valor.ToString("00000.00");
    


    Como ves lo que estoy haciendo es no pasar 10,50 sino 00010,50. Con lo cual creo que lo mejor es que hagas lo que yo hice hace ya algún tiempo dejar el MaskedTextBox donde esta, en el ToolBox :)

    Leandro y Jose, esta es la diferencia que hay entre lo fácil y lo difícil, que para tomar un camino primero hay que analizarlo y excepto que alguien conozca una propiedad mágica así es como funciona el MaskedTextBox, para mi mal.

    Aquí hay un link donde un usuario ha tenido un problema parecido al tuyo.

    http://social.msdn.microsoft.com/Forums/en/winforms/thread/ebe1fce9-ee7f-4225-9488-d38f1d30ad04

     

    Saludos,

     


    phurtado
    domingo, 16 de octubre de 2011 9:48
  • hola

    has evaluado la cultura que tiene definida tu aplicacion ?

    porque si defines 10.00 es porque es una notacion de EEUU, pero quizas la cultura que tienes es de es-ES

    prueba definiendo en el Main del Programs.cs la siguiente linea

    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

    y luego usa

    decimal val = Convert.ToDecimal("10.00");

    txtMonto.Text = val.ToString();


    si la notacion de tu aplicacion defines el punto como separador de decimales deberia tomar correctamente ese valor en la mascara

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 16 de octubre de 2011 12:26
  • Hola Leandro,

    El MaskedTextBox tiene incluso una propiedad que es Culture, pero hagas lo que hagas o le mandas la longitud de la mascara o se comporta de esta forma.

    En el caso de Samir puede hacer dos cosas o formatear como he indicado ToString("00000.00") o crearse algo para enviarle esto "   10.50";

    Estas dos opciones son las que hay o bien con el separador decimal ","

     

    this.maskedTextBox1.Text = "   10.50";
    this.maskedTextBox1.Text = "00010.50";
    

     


    Si le mandas 10.50 ó 10,50 dependiendo de la cultura y consumes el evento MaskInputRejected puedes observar como te salta el evento y te indica que la posición 2 es incorrecta.

     

     this.maskedTextBox1.MaskInputRejected += (o, e) =>
                    {
                        Console.WriteLine(string.Format("{0} {1}",e.Position,e.RejectionHint));
                    };
                
     this.maskedTextBox1.Text = "10,50";

     


    Esto va a escribir "2 DigitExpected" y va a pintar 1050.Es como si fuese chequeando cada uno de los caracteres con  la mascara y en el que no es valido para esa posición lo rechaza.

    Realmente quien hace esto es MaskedTextProvider, la verdad que nunca lo he utilizado y me ha sorprendido este comportamiento, a mí personalmente no me gustaba puesto que es incomodo para introducir información pero esto ya me hace confirmar que no tengo que utilizarlo.

    Saludos,


    phurtado
    domingo, 16 de octubre de 2011 16:42