5

可能重复:
如何制作一个只接受数字的文本框?

我有一个希望存储为字符串的电话号码。

我在使用中阅读了这个

txtHomePhone.Text

我认为我需要的是某种数字但无法正常工作

if (txtHomePhone.Text == //something.IsNumeric)
{
    //Display error
}
else
{
    //Carry on with the rest of program ie. Add Phone number to program.
}

只允许输入数值的最佳方法是什么?

4

6 回答 6

10

由于txtHomePhone代表 a TextBox,您可以使用该KeyPress事件来接受您希望允许的字符并拒绝您不希望允许的字符txtHomePhone

例子

public Form1()
{
    InitializeComponent();
    txtHomePhone.KeyPress += new KeyPressEventHandler(txtHomePhone_KeyPress);
}
private void txtHomePhone_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == '') //The  character represents a backspace
    {
        e.Handled = false; //Do not reject the input
    }
    else
    {
        e.Handled = true; //Reject the input
    }
}

注意以下字符(不可见)表示退格。
注意:您可以始终允许或禁止使用e.Handled.
注意:如果您想使用-, ,()只使用一次,您可以创建一个条件语句。如果您想允许在特定位置输入这些字符,我建议您使用正则表达式。

例子

if (e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == '') //The  character represents a backspace
{
    e.Handled = false; //Do not reject the input
}
else
{
    if (e.KeyChar == ')' && !txtHomePhone.Text.Contains(")"))
    {
        e.Handled = false; //Do not reject the input
    }
    else if (e.KeyChar == '(' && !txtHomePhone.Text.Contains("("))
    {
        e.Handled = false; //Do not reject the input
    }
    else if (e.KeyChar == '-' && !textBox1.Text.Contains("-"))
    {
        e.Handled = false; //Do not reject the input
    }
    else if (e.KeyChar == ' ' && !txtHomePhone.Text.Contains(" "))
    {
        e.Handled = false; //Do not reject the input
    }
    else
    {
        e.Handled = true;
    }
}

谢谢,
我希望你觉得这有帮助:)

于 2012-11-06T14:52:41.523 回答
7

我假设您在这里使用的是 Windows 窗体,请查看MaskedTextBox。它允许您指定字符的输入掩码。

txtHomePhone.Mask = "##### ### ###";

由于这允许您限制输入值,因此您可以安全地将值解析为整数。

注意:如果您使用的是 WPF,我认为基础库中没有 MaskedTextBox,但是NuGet上有可用的扩展,它们可能提供类似的功能。

于 2012-11-06T14:37:06.097 回答
4

要检查是否输入了数值,您可以使用Integer.TryParse

int num;
bool isNum = Integer.TryParse(txtHomePhone.Text.Trim(), out num);

if (!isNum)
    //Display error
else
    //Carry on with the rest of program ie. Add Phone number to program.

但请记住,电话号码不一定只是数字。有关蒙面文本框,请参阅 Trevor Pilley 答案。

于 2012-11-06T14:36:56.087 回答
3

试试这个

if (!txtHomePhone.Text.All(c=> Char.IsNumber(c)))
{
    //Display error
}
else
{
    //Carry on with the rest of program ie. Add Phone number to program.
}
于 2012-11-06T14:36:17.473 回答
0

通常我会按照 davenewza 的建议使用 Integer.TryParse,但另一种选择是使用 C# 中的 VisualBasic IsNumeric 函数。

添加对 Microsoft.VisualBasic.dll 文件的引用,然后使用以下代码。

if (Microsoft.VisualBasic.Information.IsNumeric(txtHomePhone.Text))
{
    //Display error
}
else
{
    //Carry on with the rest of program ie. Add Phone number to program.
}
于 2012-11-06T14:48:14.247 回答
0

我发现这样做的最好方法是只允许用户在文本框中输入数字键,感谢您的帮助。

于 2012-11-06T14:53:20.840 回答