尝试首先键入连字符时,输入字符串格式不正确

时间:2014-10-12 02:57:27

标签: c# regex winforms

我试图在文本框中输入一个负数,但每当我点击文本框并尝试键入它们连字符时就会产生错误,我也不希望它创建同样的错误如果我不小心将文本框留空了。正如之前所做的那样

TextBox tbox = this.Controls.Find("Team" + r.ToString() + "Q" + c.ToString(), true).FirstOrDefault() as TextBox;
int t1 = Convert.ToInt32(tbox.Text);
if (r == 1) team1score += t1;`

1 个答案:

答案 0 :(得分:2)

是的,可能是因为当您键入-时,会调用CalculateTotals方法并尝试将-转换为整数,然后失败。您没有显示您如何进行转换,这是您代码中最重要的部分。你可能应该这样做:

int myInt;
if (!int.TryParse(senderTB.Text, out myInt))
{
    // The value in the textbox isn't an integer.
    // Use 0 as the default.
    myInt = 0;
}

但这并不完全正确,因为用户可能会输入类似4000000000的内容,大于int

快速解决方法是修改正则表达式,使其至少需要一个数字:

Regex reg = new Regex(@"^-?[0-9]+$");

*替换为+赢了,只允许连字符匹配。这将解决您的直接问题,但它不是完整的错误检查。但它可能足以满足您的目的。

通常,您可以轻松地使用正则表达式来验证有符号整数的表单(即可选的连字符后跟一个或多个数字),但它很难使用正则表达式,以确保该数字在有符号整数的范围内。使用正则表达式确保数字不小于-2147483648或大于2147483647是很难的。

您可能需要这些方法的组合:使用正则表达式来防止用户在文本框中键入非法字符,并使用int.TryParse验证computeTotals方法中的数字。而不是默认值为0,让程序显示一个消息框,通知用户错误。