我试图在文本框中输入一个负数,但每当我点击文本框并尝试键入它们连字符时就会产生错误,我也不希望它创建同样的错误如果我不小心将文本框留空了。正如之前所做的那样
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;`
答案 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,让程序显示一个消息框,通知用户错误。