VALIDAR COMA(,) EN CAJA DE TEXTO

Answered VALIDAR COMA(,) EN CAJA DE TEXTO

  • Saturday, October 15, 2011 6:58 PM
     
      Has Code

     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
    • Moved by qwalgrandeMVP Saturday, October 15, 2011 7:19 PM Es una pregunta de desarrollo (De:SQL Server)
    •  

All Replies

  • Saturday, October 15, 2011 7:14 PM
    Moderator
     
     

    ¿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
    • Proposed As Answer by qwalgrandeMVP Saturday, October 15, 2011 7:19 PM
    • Unproposed As Answer by Zamm92 Saturday, October 15, 2011 7:21 PM
    •  
  • Saturday, October 15, 2011 7:23 PM
     
     

    Lo siento sq lo hice demasiado rapito, y ahora como lo borro?

    xD

    Gracias


    Samir Eduardo A.A
  • Saturday, October 15, 2011 7:36 PM
    Moderator
     
     Answered

    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
    • Marked As Answer by Zamm92 Saturday, October 15, 2011 7:42 PM
    •  
  • Saturday, October 15, 2011 7:42 PM
     
     

    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
  • Saturday, October 15, 2011 8:57 PM
     
     

    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
  • Sunday, October 16, 2011 9:48 AM
    Moderator
     
      Has Code

    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
  • Sunday, October 16, 2011 12:26 PM
    Moderator
     
     

    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
  • Sunday, October 16, 2011 4:42 PM
    Moderator
     
      Has Code

    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