TextBox только с числами - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно создать TextBox только с числами, но я не смог.Я попытался поставить: InputScope = "Numbers", но это работает только на мобильном телефоне.Также я попробовал на TextChanging это:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
    {

        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
    }
}

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вы можете сделать что-то еще вместо TextBox.Text.Remove функции, которая является Substring функцией, а также вы должны исправить это, когда они копируют последовательность символов, которая включает буквы в центре строки: -

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var txt = textBox1.Text;

        if (System.Text.RegularExpressions.Regex.IsMatch(txt, "[^0-9]"))
        {
            for (int i = 0; i < txt.Length; i++)
                if (!char.IsDigit(txt[i]))
                    if (i != txt.Length - 1)
                    {
                        //If he pasted a letter inclusive string which includes letters in the middle
                        //Remove the middle character or remove all text and request number as input
                        //I did the second way
                        textBox1.Text = "";
                        break;
                    }
                    else
                    {
                        //If he just typed a letter in the end of the text
                        textBox1.Text = txt.Substring(0, txt.Length - 1);
                        break;
                    }
        }
}
0 голосов
/ 11 апреля 2019

Вот решение O (1) без сопоставления строк

    bool textCanceled = false;

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (!Char.IsDigit((char)e.Key))
            textCanceled = true;
        else
            textCanceled = false;

    }

    private void TextBox_BeforeTextChanging(TextBox sender, TextBoxBeforeTextChangingEventArgs args)
    {
        args.Cancel = textCanceled;
    }

, возможно, придется обрабатывать символ возврата в качестве особого случая

0 голосов
/ 03 октября 2018

Вы можете либо запретить любой нечисловой ввод, либо просто отфильтровать цифры в тексте.

Запрет ввода без цифр

Использование BeforeTextChanging event:

<TextBox BeforeTextChanging="TextBox_OnBeforeTextChanging" />

А теперь обработайте так:

private void TextBox_OnBeforeTextChanging(TextBox sender,
                                          TextBoxBeforeTextChangingEventArgs args)
{
    args.Cancel = args.NewText.Any(c => !char.IsDigit(c));
}

Это выражение LINQ вернет true и, следовательно, Cancel изменение текста в случае, если оно встретится с любымсимвольный символ на входе.

Фильтрация нецифрового ввода

Использование события TextChanging:

<TextBox TextChanging="TextBox_OnTextChanging" /> 

И обрабатывать так:

private void TextBox_OnTextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
    sender.Text = new String(sender.Text.Where(char.IsDigit).ToArray());
}

Этот запрос LINQ отфильтрует нецифровые символы и создаст новый string только с цифрами на входе.

Предпочтительно использовать TextChanging и BeforeTextChanging, поскольку TextChanged происходит слишком поздно, поэтому пользователь будет сбит с толку, увидев символы, временно отображаемые на экране и сразу исчезающие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...