Предел чисел после десятичного числа при нажатии клавиши Событие - PullRequest
3 голосов
/ 31 августа 2011

Я использую следующий код для получения только цифр от пользователя и только одной десятичной точки, что хорошо работает для меня на событии KeyPress:

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
    e.Handled = true;
}

if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
    e.Handled = true;
}

Теперь я хочу ограничить цифры / цифры последесятичное число / точка, т. е. 35,25468, означает, что после точки / десятичного знака требуется всего 6 цифр / цифр.

Обновите меня!

Ответы [ 5 ]

4 голосов
/ 21 сентября 2011
private void price_tb_KeyPress(object sender, KeyPressEventArgs e)
        {

        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true;
        }

        // only allow one decimal point
        if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
        {
            e.Handled = true;
        }

        if (!char.IsControl(e.KeyChar))
        {

        TextBox textBox = (TextBox)sender;

        if (textBox.Text.IndexOf('.') > -1 &&
                 textBox.Text.Substring(textBox.Text.IndexOf('.')).Length >= 3)
        {
            e.Handled = true;
        }

        }

    }

Этот код поможет вам.Он занимает только один знак после запятой и две цифры после одного знака после запятой, и вы можете изменить его соответственно.

0 голосов
/ 22 октября 2012

У меня было textBox.SelectionLength == 0, чтобы разрешить изменение выделенного текста:

private void price_tb_KeyPress(object sender, KeyPressEventArgs e) {
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') {
        e.Handled = true;
    }
    TextBox textBox = (TextBox)sender;
    // only allow one decimal point
    if (e.KeyChar == '.' && textBox.Text.IndexOf('.') > -1) {
        e.Handled = true;
    }
    if (!char.IsControl(e.KeyChar) && textBox.SelectionLength == 0) {
        if (textBox.Text.IndexOf('.') > -1 && textBox.Text.Substring(textBox.Text.IndexOf('.')).Length >= 3) {
            e.Handled = true;
        }
    }
}
0 голосов
/ 31 августа 2011

вы можете добавить дополнительную проверку следующим образом:

TextBox textBox = (TextBox) sender;

if (textBox.Text.IndexOf('.') > -1 &&
         textBox.Text.Substring(textBox.Text.IndexOf('.')).Length >=3)
{
    e.Handled = true;
}

Обратите внимание, подстрока будет содержать '.'и, следовательно, чек >=3.

0 голосов
/ 31 августа 2011

При нажатии клавиши отформатируйте строку и установите textBox.Text в форматированную строку.

TextBox.Text = String.Format("{0:N3"}", textBox.Text)

Этот конкретный формат обрезает число с третьим десятичным знаком.

0 голосов
/ 31 августа 2011

В событии нажатия клавиши и / или в случае подтверждения проверьте количество символов после запятой. При нажатии клавиши, подавить его. при подтверждении удалите лишние десятичные знаки. Убедитесь, что вы получаете символ десятичной точки из NumberFormatInfo, не все культуры используют '.', Т.е. во Франции их десятичная точка на самом деле является запятой

...