格式错误清除TextBox解析为整数

时间:2016-02-07 02:40:58

标签: c# winforms textbox

我正在使用Windows窗体应用程序,并且在清除用户文本框时遇到问题。文本框被解析为int。我在应用程序底部附近有一个按钮,允许用户清除表单的不同部分,标记文本框等。

标签清晰,但任何已解析为int的文本框我都会在TextChanged方法上出错。

xxx = textbox name
yyy = new int var used in other parts of code

调用xxx.Clear();时,我会在下面遇到异常:

类型

的未处理异常
  mscorlib.dll中发生了

System.FormatException'   附加信息:输入字符串的格式不正确。

以下是代码示例

private void xxx_TextChanged(object sender, EventArgs e){
    // parse user text and convert to int
    yyy = int.Parse(xxx.Text);
}

private void btnExit_Click(object sender, EventArgs e){
    // close program
    this.Close();
}

private void btnClear_Click(object sender, EventArgs e){
    xxx.Clear();
}

5 个答案:

答案 0 :(得分:1)

将textBoxName.Text放入变量中,并检查其值是否为null。

int xxx = textbox.Text ;
if(xxx == ""){
   //do something
}

答案 1 :(得分:0)

当你使用int32.parse时,你应该小心你的字符串不是null并且都包含像

这样的数字

"123456789"

如果您认为字符串可能为null,则不应包含您应使用的数字字符:

int32.TryParse(string String, out int iString);

并像这样使用它:

int i = 0; // default  
string s = "somthing123somthing456blah";  
int32.TryParse(s, out i);  

结果应为:123456为整数

编辑:
如果你不是TextChanged开火:

mytextbox.TextChanged -= myTextBox_TextChanged;  

让你改变并且:

mytextbox.TextChanged += myTextBox_TextChanged;

答案 2 :(得分:0)

我怀疑与重新输入代码有关。调用xxxTxtBox.Clear()时,会调用TextChanged方法,这意味着在空文本框中调用int.parse(null或string.empty无法解析为整数) ,抛出一个例外。

修复此问题的首选方法可能是在重新进入时设置标记,例如this

简单的方法是将TextChanged()逻辑放在try/catch中,这意味着在重新输入时,int.parse()会失败,但您的用户却看不到问题。< / p>

答案 3 :(得分:0)

您需要评估文本框是否为空:

enter private void xxx_TextChanged(object sender, EventArgs e)
{
     // parse user text and convert to int if value is't Empty
     yyy = String.IsNullOrEmpty(xxx.Text) ? 0 : int.Parse(xxx.Text);
}

试试这个:

private void btnClear_Click(object sender, EventArgs e){
    xxx.Text = String.Empty;
}

答案 4 :(得分:0)

正如其他人所指出的那样澄清,您遇到的问题是由于在调用xxx_TextChanged()并且文本框内容更改为空字符串时调用xxx.Clear()这一事实。这会导致int.Parse()针对空字符串执行,这会产生所述错误。

要解决此问题,您应该将xxx_TextChanged()方法更改为类似于以下内容的方法:

private void xxx_TextChanged(object sender, EventArgs e)
{
    // Parse user text and convert to integer, when able:
    if ((string.IsNullOrEmpty(xxx.Text)) ||
        (!int.TryParse(xxx.Text, out yyy)))
    {
        yyy = 0;
    }
}

请注意,关键区别在于对文本框内容的“null或空”检查。无需解析空值或空字符串。此外,我们可以使用int.Parse()方法,而不是使用int.TryParse(),以便无效的数字输入(例如,“abc”)不会产生错误,而是分配错误一些默认值(在这种情况下,0)。

其余代码可以保持原样。