Как сделать текстовое поле только для приема чисел в C# для приложения Windows Store, используя пустой шаблон

Я создаю приложение Windows Store в Visual Studio 12, я использую язык C#, у меня есть текстовое поле, но как сделать так, чтобы оно принимало только цифры, если пользователь пытается ввести любое другое значение, кроме числа, оно должно показать ошибку сообщение

3 ответа

Решение

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

private void textBox1_TextChanged(object sender, EventArgs e)
    {

        int num;

        try
        {
            num = int.Parse(textBox1.Text);  //here's your value
            label1.Text = num.ToString();
        }

        catch (Exception exc)
        {
            label2.Text = exc.Message;
        }
    }

В дополнение к другим ответам, поскольку вы пишете приложение для Магазина Windows и, скорее всего, будете иметь дело с виртуальной клавиатурой, вы можете убедиться, что получили подходящее представление клавиатуры, установив InputScope из TextBox правильно ( ссылка на MSDN здесь)

<TextBox InputScope="Number" .../>

Есть куча полезного InputScope значения описаны здесь.

Обратите внимание, что вам все равно нужно будет выполнить проверку, как описано в других ответах, потому что вам нужно обслуживать пользователя, переопределяющего отображаемый тип клавиатуры или имеющего физическую клавиатуру. Я бы сделал это с KeyDown обработчик событий, вот так

private void TextBox_KeyDown_Number(object sender, KeyRoutedEventArgs e)
{
    if ((uint)e.Key >= (uint)Windows.System.VirtualKey.Number0 
        && (uint)e.Key <= (uint)Windows.System.VirtualKey.Number9)
    {
        e.Handled = false;
    }
    else e.Handled = true;       
}

Вы можете использовать попробовать и поймать

или вы можете пойти немного больше кода, чтобы определить, является ли ввод число (int или double) или нет, выполнив это

//---------------------------------------------------------------------------
bool TFmBatteryConfiguration::IsValidInt(char* x)
{
    bool Checked = true;

    int i = 0;
    do
    {
        //valid digit?
        if (isdigit(x[i]))
        {
            //to the next character
            i++;
            Checked = true;
        }
        else
        {
            //to the next character
            i++;
            Checked = false;
            break;
        }
    } while (x[i] != '\0');

    return Checked;
}

//---------------------------------------------------------------------------
bool TFmBatteryConfiguration::IsValidDouble(char* x)
{
    bool Checked = true;

    int i = 0;

    do
    {
        //valid digit?
        if (isdigit(x[i]))
        {
            //to the next character 
            i++;
            Checked = true;
        }
        else if (x[i] == '.')
        {
            //First character
            if (x[0] == '.')
            {
                Checked = false;
                break;    
            }
            else if (x[i] == '.' && x[i+1] == '\0')
            {
                Checked = false;
                break;
            }
            else
            {
                //to the next character
                i++;
            }
        }
        else
        {
            i++;
            Checked = false;
            break;
        }
    } while (x[i] != '\0');

    return Checked;
}

Код выше взят прямо из одного моего проекта на C++. но идея та же. C# предоставляется с char.isDigit()

Другие вопросы по тегам