int32行为异常时得到错误答案,如何解决?C#
我试图用这段代码得到结果。假设它可以使用我选择的任何数字,但它最终只适用于“0”。(val1,是我在其中写入数字的文本框)和(yarncombobox,ft3.garnlangd1是我获取计算所需值的地方)。我想Int32可能是错的…我应该用什么来代替呢 此外,删除所有数字时,我会收到错误消息“System.FormatException:'Indatasträngen hade ett felaktigt format.” 编辑:我确实让它工作了一些,它确实给出了正确的浮点值。但同样的问题。删除同一框中的所有数字时,应用程序崩溃int32行为异常时得到错误答案,如何解决?C#,c#,int32,C#,Int32,我试图用这段代码得到结果。假设它可以使用我选择的任何数字,但它最终只适用于“0”。(val1,是我在其中写入数字的文本框)和(yarncombobox,ft3.garnlangd1是我获取计算所需值的地方)。我想Int32可能是错的…我应该用什么来代替呢 此外,删除所有数字时,我会收到错误消息“System.FormatException:'Indatasträngen hade ett felaktigt format.” 编辑:我确实让它工作了一些,它确实给出了正确的浮点值。但同样的问题。删
float val1 = Convert.ToSingle(YarnWeightTextbox.Text);
Class2 ft3 = YarnComboBox.SelectedItem as Class2;
float val2 = val1 / 50 * ft3.garnlangd1;
{
YarnLengthTextbox.Text = Convert.ToString(val2);
以下是几点建议:
private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
{
//Check for the empty string. If it is empty then just return
string weight = YarnWeightTextbox.Text;
if(String.IsNullOrEmpty(weight))
{
return;
}
//Otherwise convert to integer or to a float as you have
Int32 val1 = Convert.ToInt32(YarnWeightTextbox.Text);
Class2 ft3 = YarnComboBox.SelectedItem as Class2;
//When casting using the `as` operator. I make a point of checking for null just
//in case for some reason it isn't an instance of the class I expect.
if(ft3 != null)
{
//Finally change the 50 to 50.0. This tells the compiler to divide using a float
//rather than an integer. Dividing 2 integers results in the truncation of the fractional part
YarnLengthTextbox.Text = Convert.ToString((val1 / 50.0) * ft3.garnlangd1);
}
}
最重要的部分是:
以下是几点建议:
private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
{
//Check for the empty string. If it is empty then just return
string weight = YarnWeightTextbox.Text;
if(String.IsNullOrEmpty(weight))
{
return;
}
//Otherwise convert to integer or to a float as you have
Int32 val1 = Convert.ToInt32(YarnWeightTextbox.Text);
Class2 ft3 = YarnComboBox.SelectedItem as Class2;
//When casting using the `as` operator. I make a point of checking for null just
//in case for some reason it isn't an instance of the class I expect.
if(ft3 != null)
{
//Finally change the 50 to 50.0. This tells the compiler to divide using a float
//rather than an integer. Dividing 2 integers results in the truncation of the fractional part
YarnLengthTextbox.Text = Convert.ToString((val1 / 50.0) * ft3.garnlangd1);
}
}
最重要的部分是:
正如Shane Haw在评论中提到的,您将获得
格式异常
,因为文本更改
事件会在文本更改时触发
如果YarnWeightTextBox.Text
中的值为“5”
,并且您删除了“5”
,则会触发TextChanged
事件。这意味着您正在将一个空字符串“
传递给Convert.ToSingle
。空字符串不会转换为浮点
,因此您会得到格式异常
。如果在文本框
中放入除数字以外的任何内容,也会得到相同的结果
更好的选择是检查YarnWeightTextBox.Text中的值是否解析为float
,而不是使用Convert.ToFloat
private void YarnWeightTextBox\u text已更改(对象发送方,事件参数e)
{
浮动值1=0.0F;
if(!float.TryParse(YarnWeightTextBox.Text,out val1))
{
//YarnWeightTextBox.Text中的值未解析为浮点值。您可以
//在此处执行某些操作,以向用户表明他们没有提供正确的
//值,或者只是返回。
返回;
}
//计算纱线长度并将其放入YarnLengthTextBox。像现在一样输入文本。
}
或者,如果这是Windows窗体
,您可以查看该控件,该控件将防止用户输入无效值。正如Shane Haw在评论中提到的,您将获得FormatException
,因为TextChanged
事件在文本更改时触发
如果YarnWeightTextBox.Text
中的值为“5”
,并且您删除了“5”
,则会触发TextChanged
事件。这意味着您正在将一个空字符串“
传递给Convert.ToSingle
。空字符串不会转换为浮点
,因此您会得到格式异常
。如果在文本框
中放入除数字以外的任何内容,也会得到相同的结果
更好的选择是检查YarnWeightTextBox.Text中的值是否解析为float
,而不是使用Convert.ToFloat
private void YarnWeightTextBox\u text已更改(对象发送方,事件参数e)
{
浮动值1=0.0F;
if(!float.TryParse(YarnWeightTextBox.Text,out val1))
{
//YarnWeightTextBox.Text中的值未解析为浮点值。您可以
//在此处执行某些操作,以向用户表明他们没有提供正确的
//值,或者只是返回。
返回;
}
//计算纱线长度并将其放入YarnLengthTextBox。像现在一样输入文本。
}
或者,如果这是Windows窗体
,您可以查看防止用户输入无效值的控件。之所以FormatException
,是因为每次更改文本时,包括删除所有文本时,都会触发TextChanged
事件Convert.ToInt32
然后尝试将空字符串转换为整数,然后抛出异常。当你说它对0以外的任何东西都不起作用时,你是什么意思?会发生什么?是否引发异常?或者只是文本框中的输出错误?对于int32,如果我写“50”它的“170”,它应该是,但当我将它改为“55”它仍然是“170”。如果我写“555”,我会得到“1700”,但是…我尝试了“float val1=Convert.ToSingle(YarnWeightTextbox.Text);”,这确实做了正确的计算。但都一样。当我删除所有内容时,我会收到错误消息。FormatException
是因为每次更改文本时,包括删除所有文本时,都会触发TextChanged
事件Convert.ToInt32
然后尝试将空字符串转换为整数,然后抛出异常。当你说它对0以外的任何东西都不起作用时,你是什么意思?会发生什么?是否引发异常?或者只是文本框中的输出错误?对于int32,如果我写“50”它的“170”,它应该是,但当我将它改为“55”它仍然是“170”。如果我写“555”,我会得到“1700”,但是…我尝试了“float val1=Convert.ToSingle(YarnWeightTextbox.Text);”,这确实做了正确的计算。但都一样。当我删除所有内容时,我会收到错误消息。哦,我现在确实明白它是如何工作的(很好的解释)。我确实试着写了,但我得到了下一个错误,“返回”无效的压缩项。我也尝试过();及;和:返回后相同,错误相同
private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
{
if (sender is TextBox textBox)
{
if (float.TryParse(textBox.Text, out var yarnWeight) && YarnComboBox.SelectedItem is Class2 class2)
{
var yarnLength = (yarnWeight / 50.0) * class2.garnlangd1;
YarnLengthTextbox.Text = yarnLength.ToString();
}
else
{
YarnLengthTextbox.Text = string.Empty;
}
}
}