如何使一个文本框只接受数字在c#中为Windows网络商店应用程序使用空白模板

本文关键字:网络 Windows 应用程序 空白 中为 文本 何使一 数字 | 更新日期: 2023-09-27 18:11:49

我正在visual studio 12中创建一个windows store应用程序,我使用c#语言,我有一个文本框,但如何使其只接受数字,如果用户试图输入任何其他值而不是数字,它应该显示一个错误消息

如何使一个文本框只接受数字在c#中为Windows网络商店应用程序使用空白模板

除了其他的答案,当你正在写一个Windows Store应用程序,很可能会处理一个虚拟键盘,你可以确保你得到一个合适的键盘视图通过设置TextBoxInputScope正确(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;       
}

您可以像下面的例子一样简单地使用trycatch:

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;
        }
    }

您可以使用尝试抓住

或者你可以用更多的代码来确定输入是否是number (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()