La validazione, Caselle di testo, permettendo solo i decimali

Io sto usando il seguente codice per la validazione delle textbox.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = SingleDecimal(sender, e.KeyChar);
}

public bool SingleDecimal(System.Object sender, char eChar)
{
    string chkstr = "0123456789.";
    if (chkstr.IndexOf(eChar) > -1 || eChar == Constants.vbBack) 
    {
        if (eChar == ".") 
        {
            if (((TextBox)sender).Text.IndexOf(eChar) > -1) 
            {     
                return true;
            }
            else 
            {         
                return false;  
            }
        }   
        return false;
     }
     else 
     {
         return true;  
     }
}

Problema è Costanti.vbBack sta mostrando l’errore.Se non ho usato Costanti.vbBack,backspace non è workimg.Cosa alterazione posso far funzionare il tasto backspace.C’è qualcuno che può aiutarmi?

InformationsquelleAutor user42348 | 2010-01-21

10 Replies
  1. 17

    qui è il codice che devo usare…

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        //allows 0-9, backspace, and decimal
        if (((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != 46))
        {
            e.Handled = true;
            return;
        }
    
        //checks to make sure only 1 decimal is allowed
        if (e.KeyChar == 46)
        {
            if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
                e.Handled = true;
        }
    }
    Io sono sempre riferimento a un Oggetto non impostato su un’istanza di un oggetto.
    Su quale linea si sono sempre l’errore?

    InformationsquelleAutor Ryan Alford

  2. 1

    creare un componente ereditato dalla casella di testo e utilizzare questo codice:

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }
    
            //only allow one decimal point
            if (e.KeyChar == '.' && Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
    
            base.OnKeyPress(e);
        }

    InformationsquelleAutor Rahimi

  3. 1

    Qui è un Vb.Net versione per @Eclipsed4utoo risposta

    If (((Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar) <> 46)) Then
        e.Handled = True
        Exit Sub
    End If
    
    ' checks to make sure only 1 decimal is allowed
    If (Asc(e.KeyChar) = 46) Then
        If (sender.Text.IndexOf(e.KeyChar) <> -1) Then
            e.Handled = True
        End If
    End If

    InformationsquelleAutor Codemunkeee

  4. 1

    Questo codici per i decimali. Se si desidera utilizzare float inoltre, è possibile utilizzare solo la doppia insteat int
    E sarà eliminare automaticamente ultimi sbagliato personaggi

    private void txt_miktar_TextChanged(object sender, TextChangedEventArgs e)
        {
            if ((sender as TextBox).Text.Length < 1)
            {
                return;
            }
    
            try
            {
                int adet = Convert.ToInt32((sender as TextBox).Text);
            }
            catch
            {
                string s = "";
                s = (sender as TextBox).Text;
                s = s.Substring(0, s.Length - 1);
                (sender as TextBox).Text = s;
                (sender as TextBox).Select(s.Length, s.Length);
            }
        }

    InformationsquelleAutor

  5. 1

    È possibile effettuare un metodo per verificare se si tratta di un numero.

    Invece di controllo per la . come separatore decimale, si dovrebbe ottenere da CurrentCulture oggetto come potrebbe essere un altro personaggio a seconda di dove nel mondo ci si trovi.

    public bool isNumber(char ch, string text)
    {
        bool res = true;
        char decimalChar = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
    
        //check if it´s a decimal separator and if doesn´t already have one in the text string
        if (ch == decimalChar && text.IndexOf(decimalChar) != -1)
        {
            res = false;
            return res;
        }
    
        //check if it´s a digit, decimal separator and backspace
        if (!Char.IsDigit(ch) && ch != decimalChar && ch != (char)Keys.Back)
            res = false;
    
        return res;
    }

    Quindi è possibile chiamare il metodo in KeyPress caso di TextBox:

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if(!isNumber(e.KeyChar,TextBox1.Text))
            e.Handled=true;
    }
    Grande Risposta… grazie mondo

    InformationsquelleAutor luchezco

  6. 0

    Come circa usando l’esempio MSDN?

    Sono u utilizzando il”. ” come separatore decimale? se è così che io non so perché si utilizza

    if (((TextBox)sender).Text.IndexOf(eChar) > -1)

    InformationsquelleAutor RvdK

  7. 0

    Qui un po ‘ di codice dalla mia app. Gestire uno più caso, come in relazione alla selezione

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (e.KeyChar == '\b')
            return;
        string newStr;
        if (SelectionLength > 0)
            newStr = Text.Remove(SelectionStart, SelectionLength);
    
        newStr = Text.Insert(SelectionStart, new string(e.KeyChar, 1));
        double v;
       //I used regular expression but you can use following.
        e.Handled = !double.TryParse(newStr,out v);
    
        base.OnKeyPress(e);
    }

    qui regex espressione di se come utilizzarli invece di semplice tipo di analisi

    const string SIGNED_FLOAT_KEY_REGX = @"^[+-]?[0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]*)?$";
    const string SIGNED_INTEGER_KEY_REGX = @"^[+-]?[0-9]*$";
    
    const string SIGNED_FLOAT_REGX = @"^[+-]?[0-9]*(\.[0-9]+)?([Ee][+-]?[0-9]+)?$";
    const string SIGNED_INTEGER_REGX = @"^[+-]?[0-9]+$";

    InformationsquelleAutor particle

  8. 0

    Credo che questa sia la soluzione ideale, in quanto non solo limita il testo di numeri, solo un segno meno iniziale, e solo con il punto decimale, ma permette la sostituzione di testo selezionato, se contiene un punto decimale. Il testo selezionato ancora non può essere sostituito da un punto decimale se c’è un punto decimale nel testo non selezionate. Permette un segno meno solo se il primo carattere o se l’intero testo è selezionato.

    private bool DecimalOnly_KeyPress(TextBox txt, bool numeric, KeyPressEventArgs e)
    {
      if (numeric)
      {
        //only allow numbers
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(Keys.Back))     
          return true;
      }
      else
      {
        //allow a minus sign if it's the first character or the entire text is selected
        if (e.KeyChar == '-' && (txt.Text == "" || txt.SelectedText == txt.Text))
          return false;
    
        //if a decimal point is entered and if one is not already in the string
        if ((e.KeyChar == '.') && (txt.Text.IndexOf('.') > -1))                     
        {
          if (txt.SelectedText.IndexOf('.') > -1)
            //allow a decimal point if the selected text contains a decimal point, that is the
            //decimal point replaces the selected text 
            return false;
          else
            //don't allow a decimal point if one is already in the string and the selected text
            //doesn't contain one
            return true;                                                        
        }
    
        //if the entry is not a digit
        if (!Char.IsDigit(e.KeyChar))                                               
        {
          //if it's not a decimal point and it's not a backspace then disallow
          if ((e.KeyChar != '.') && (e.KeyChar != Convert.ToChar(Keys.Back)))     
          {
            return true;
          }
        }
      }
    
      //allow only a minus sign but only in the beginning, only one decimal point, any digit, a
      //backspace, and replace selected text.
      return false;                                                                   
    }

    InformationsquelleAutor lianaent

  9. 0

    Qui è un vb.net versione che permette di negativo cifra decimale, evitare il copia e incolla facendo in modo che il segno negativo non è nel mezzo del testo o il punto decimale non all’inizio del testo

    Public Sub Numerico(textControl As Object, e As KeyPressEventArgs)

        Dim Index As Int32 = textControl.SelectionStart
        Dim currentLine As Int32 = textControl.GetLineFromCharIndex(Index)
        Dim currentColumn As Int32 = Index - textControl.GetFirstCharIndexFromLine(currentLine)
    
        Dim FullStop As Char
        FullStop = "."
    
        Dim Neg As Char
        Neg = "-"
    
        ' if the '.' key was pressed see if there already is a '.' in the string
        ' if so, dont handle the keypress
        If e.KeyChar = FullStop And textControl.Text.IndexOf(FullStop) <> -1 Then
            e.Handled = True
            Return
        End If
        'If the '.' is at the begining of the figures, prevent it
        If e.KeyChar = FullStop And currentColumn <= 0 Then
            e.Handled = True
            Return
        End If
    
        ' if the '-' key was pressed see if there already is a '-' in the string
        ' if so, dont handle the keypress
    
        If e.KeyChar = Neg And textControl.Text.IndexOf(Neg) <> -1 Then
            e.Handled = True
            Return
        End If
        'If the '-' is in the middle of the figures, prevent it
        If e.KeyChar = Neg And currentColumn > 0 Then
            e.Handled = True
            Return
        End If
    
        ' If the key aint a digit
        If Not Char.IsDigit(e.KeyChar) Then
            ' verify whether special keys were pressed
            ' (i.e. all allowed non digit keys - in this example
            ' only space and the '.' are validated)
            If (e.KeyChar <> Neg) And (e.KeyChar <> FullStop) And (e.KeyChar <> Convert.ToChar(Keys.Back)) Then
                ' if its a non-allowed key, dont handle the keypress
                e.Handled = True
                Return
            End If
        End If
    
    End Sub
    
    
    
    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
            Numeric(sender, e)
    
    End Sub

    InformationsquelleAutor Lord Amen

  10. 0

    provare questo con asp:RegularExpressionValidator controller

    <asp:RegularExpressionValidator ID="rgx" 
    ValidationExpression="[0-9]*\.?[0-9][0-9]" ControlToValidate="YourTextBox" runat="server" ForeColor="Red" ErrorMessage="Decimals only!!" Display="Dynamic"  ValidationGroup="lnkSave"></asp:RegularExpressionValidator>

    InformationsquelleAutor Rushabh Master

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *