none
control de textbox. RRS feed

  • Pregunta

  • Permitir en un textbox solo un punto y una coma.

    Este es mi codigo en el key press:

      CultureInfo cc = System.Threading.Thread.CurrentThread.CurrentCulture;
                if (char.IsDigit(e.KeyChar) || e.KeyChar.ToString() == cc.NumberFormat.NumberDecimalSeparator || e.KeyChar.ToString() == cc.NumberFormat.NumberGroupSeparator)
                {
                    e.Handled = false;
                }
                else if (char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }

    lunes, 2 de abril de 2018 15:49

Respuestas

Todas las respuestas

  • Hola

    Te envio una rutina que yo uso. Creo que te puede servir, está en VB pero se puede convertir.

    El textbox solo admite números ysignos y no permite mas de 1 coma.

    Un abrazo

    Module NUMEROS 
         
        Public CODIGOSEPARADOR As String = System.Globalization.CultureInfo.CurrentUICulture.NumberFormat.CurrencyDecimalSeparator 
      
        Public Sub PALNUMEROS(EV As KeyPressEventArgs, DECIMALES As Integer, TXB As TextBox) 
            REM se llama así 
            ' Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress 
            'PALNUMEROS(e, 2, texbox1) 
            ' el 2 es la cantidad de decimales y se puede cambiar 
            'End Sub 
            REM Fin de comentario 
            Dim EnteroCompleto As Boolean = False 
            If DECIMALES < 0 Then DECIMALES = 0 
            If EV.KeyChar = Convert.ToChar(Keys.Return) Then 
                EV.Handled = True 
                TXB.Focus() 
            ElseIf EV.KeyChar = "."c Or EV.KeyChar = ","c Or EV.KeyChar = "."c Then 
                EnteroCompleto = True 
                If (TXB.Text.IndexOf(","c) >= 0) Or (DECIMALES = 0) Then 
                    EV.Handled = True 
                Else 
                    If TXB.Text.Length = 0 Then 
                        TXB.Text = "0" & CChar(CODIGOSEPARADOR) 
                        TXB.SelectionStart = 3 
                        EV.Handled = True 
                    Else 
                        EV.KeyChar = CChar(CODIGOSEPARADOR)  REM","c`. 
                    End If 
                End If 
            ElseIf EV.KeyChar = "-"c And TXB.TextLength = 0 Then 
                EV.KeyChar = "-"c 
            ElseIf Not (Char.IsControl(EV.KeyChar) Or Char.IsDigit(EV.KeyChar)) Then 
                EV.Handled = True 
            ElseIf TXB.Text.IndexOf(","c) > 0 Then 
                If (TXB.Text.Length - TXB.Text.IndexOf(","c) > DECIMALES) And (TXB.SelectionStart > TXB.Text.IndexOf(","c)) And (Not (Char.IsControl(EV.KeyChar))) Then 
                    EV.Handled = True 
                End If 
            End If 
            For n As Integer = 1 To Len(TXB.Text) 
                If Mid(TXB.Text, n, 1) = CODIGOSEPARADOR Then 
                    Exit Sub 
                End If 
            Next 
        End Sub 
      


    Pedro López

    lunes, 2 de abril de 2018 18:48
  • hola

    porque pones la validacion enun mismo if, si podrias validar si es digito y en otro if si es una coma o punto

     if (char.IsDigit(e.KeyChar))
     {
         e.Handled = false;
     }
    elseif(e.KeyChar.ToString() == cc.NumberFormat.NumberDecimalSeparator){
    
       e.Handled = false;
    
    }
    elseif(e.KeyChar.ToString() == cc.NumberFormat.NumberGroupSeparator){
    
       e.Handled = false;
    
    }
    else if (char.IsControl(e.KeyChar))
    {
      e.Handled = false;
    }


    Truco: Solo Numeros en los Textboxt (Windows Forms) VB y   CSharp

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 3 de abril de 2018 4:59