Как сделать текстовое поле только для приема чисел в 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()