我正在使用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();
}
答案 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
)。
其余代码可以保持原样。