-2

我的程序要求用户在文本框中输入一个从 1 到 10 的数字。当我用户输入数字时,我将其转换为int,通过使用:

if (!int.TryParse(inputBox.Text, out input))

我使用了,!因为如果无法将数字TryParse转换为 int,则会向用户抛出错误。

这有效,直到我输入一个以 开头的数字,+例如+5+1。它没有注意到+前面有一个int. 如果我输入多个,+它会抛出一个应该的错误。

有人将如何制作检查此类输入的防错代码行?

4

3 回答 3

3

我认为您希望允许 1-10 没有正号 (+)。

int number;
var input = numberTextBox.Text;
if (!input.StartsWith("+") && int.TryParse(input, out number))
{
    //valid input, check if it's between 1-10
}

但我觉得这个要求真的很奇怪。“+10”被认为与“10”相同,它是一个有效的输入。

于 2015-08-28T02:31:28.797 回答
3

有一个重载Int32.TryParse接受一个NumberStyles值和一个IFormatProvider. - https://msdn.microsoft.com/en-us/library/zf50za27(v=vs.110).aspx

Int32.TryParseis使用的默认值NumberStyles.Integer,它允许前导和尾随空格以及前导符号。

int.TryParse("+5", NumberStyles.None, NumberFormatInfo.InvariantInfo, out x)例如,返回 false - 但是,它也为 -5 返回 false,因为包含前导符号的选项不区分 + 和 -。这是一个提示,您可能也不应该这样做,“+5”是每个位的整数,如“5”和“-5”。

于 2015-08-28T02:35:12.537 回答
-1

您可以+在运行时从 textBox 中删除或检查 + 字符,如下面的代码所示

if (inputBox.Text.Contains("+"))
{
    // throw or show message
    return;
}
if (!int.TryParse(inputBox.Text, out input))
{
}

如果您想在按下时显示弹出窗口,您可以在文本框 TextChangeEvent 中检查上述条件,或者使用按键事件来限制输入。

于 2015-08-28T02:25:30.263 回答