【问题标题】:Input String is not correct format when trying to type in a hyphen first尝试先输入连字符时,输入字符串的格式不正确
【发布时间】:2014-10-12 02:57:26
【问题描述】:

我试图在文本框中输入一个负数,但是每当我单击文本框并尝试输入连字符时,它会产生错误,如果我不小心离开,我也不希望它产生同样的错误文本框空白。和以前一样

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;`

【问题讨论】:

  • 在哪一行抛出异常?
  • 我不知道。我只知道如果我首先尝试在文本框中键入“-”,则会出现错误,可能是因为“CalculateTotals()”将团队的所有文本框加起来,它涉及“-”而不是 int
  • 请将您的代码缩短到引发异常的部分。

标签: c# regex winforms


【解决方案1】:

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

【讨论】:

  • 我所做的只是从文本框中转换文本并将其添加到乐谱中。 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
  • 我首先修复了连字符上的错误,方法是在检查后和计算总数之前添加一个解析if (!textChangedByKey) { if (!reg.IsMatch(senderTB.Text)) { return; } } else { textChangedByKey = false; lastText = senderTB.Text; int n = 0; if (int.TryParse(senderTB.Text.Trim(), out n)) { CalculateTotals(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2013-08-22
相关资源
最近更新 更多