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

问题描述:

我试图在文本框中输入负数,但每当我单击文本框并尝试键入连字符时,它都会创建错误,而且我如果我不小心将文本框留为空白,不希望它创建相同的错误。因为它之前试图首先输入连字符时,输入字符串格式不正确

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

它在哪一行引发异常? – 2014-10-12 03:52:31

+0

我不知道。我只知道如果我尝试在文本框中输入“ - ”,首先会显示错误,可能是因为'CalculateTotals()'将团队的所有文本框合并在一起,并且显示为“ - ”,而不是int – 2014-10-12 04:04:47

+0

试试'^ - ?[0-9] + $' – vks 2014-10-12 04:09:15

是的,这可能是因为,当你键入-,该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,程序会显示一个消息框,通知用户错误。

+0

我所做的只是将文本从文本框中转换并添加到分数中。 TextBox tbox = this.Controls.Find(“Team”+ r.ToString()+“Q”+ c.ToString(),true).FirstOrDefault()as TextBox; int t1 = Convert.ToInt32(tbox.Text); 如果(R == 1)+ team1score = t1' – 2014-10-12 06:14:12

+0

我固定在连字符的错误首先通过检查之后和在与计算总 '如果(!textChangedByKey) { 如果(!REG前添加一个解析.IsMatch(senderTB.Text)) { return; } } else { textChangedByKey = false; lastText = senderTB.Text; int n = 0; 如果(int.TryParse(senderTB.Text.Trim(),out n)) CalculateTotals(); }' – 2014-10-12 06:46:03