0

你好我是这个网站的新手,所以如果我没有正确解释,我很抱歉:

我正在创建一个 C# Form 应用程序,我的应用程序没有错误,但是一旦我清除我的输入字段,就会给我一个 FormatException 是 unhandeld。

这是此函数唯一适用的代码:

    private void txtR_TextChanged(object sender, EventArgs e)
    {

        R = Convert.ToInt32(txtR.Text);
        E2 = Convert.ToInt32(txtE2.Text);
        E = R * E2;
        txtE.Text = E.ToString();

        R = Convert.ToInt32(txtR.Text);
        D2 = Convert.ToInt32(txtD2.Text);
        D = R * D2;
        txtD.Text = D.ToString();

        R = Convert.ToInt32(txtR.Text);
        P2 = Convert.ToInt32(txtP2.Text);
        P = R * P2;
        txtP.Text = P.ToString();
     }
4

4 回答 4

2

该函数Convert.ToInt32()无法处理长度为零的字符串,因此您不能将txtR(或任何其他文本字段)留空。

另外,我建议您考虑不在onTextChanged事件中运行此代码。一个常见的场景可能是您擦除 的内容txtR,从而触发onTextChanged并引发异常。

在任何情况下,为了使您的代码防弹,最好使用它Int32.TryParse()来确保转换能够正常工作,正如Sharp12345 所建议的那样。


Convert.ToInt32()文档:MSDN 链接。读FormatException一点。

于 2012-05-06T21:30:10.907 回答
1

您应该使用它int.TryParse()来检查输入的值是否正确且不为空或字符串。

所以,这段代码:

R = Convert.ToInt32(txtR.Text);
E2 = Convert.ToInt32(txtE2.Text);
E = R * E2;
txtE.Text = E.ToString();

应转换为:

if (int.TryParse(txtR.Text, out R) && int.TryParse(txtE2.Text, out E2)) {        
    E = R * E2;
    txtE.Text = E.ToString();
}

就像 int 一样,float 也一样。

于 2012-05-06T22:11:05.083 回答
1

清除字段时出现错误的原因是您试图将空字符串转换为数字。清除字段时,txtR等于 String.Empty,因此无法转换为数字。当它为空时:

R = Convert.ToInt32(txtR.Text);

与以下内容几乎相同:

R = Convert.ToInt32("");

这是它做不到的。要解决此问题,您首先需要检查所有字段是否具有任何值:

    private void txtR_TextChanged(object sender, EventArgs e)
{
    if(txtR.Text.Trim().Length != 0 
    && txtE2.Text.Trim().Length != 0 
    && txtD2.Text.Trim().Length != 0 
    && txtP2.Text.Trim().Length != 0)
    {

        R = float.Parse(txtR.Text);
        E2 = float.Parse(txtE2.Text);
        E = R * E2;
        txtE.Text = E.ToString();

        R = float.Parse(txtR.Text);
        D2 = float.Parse(txtD2.Text);
        D = R * D2;
        txtD.Text = D.ToString();

        R = float.Parse(txtR.Text);
        P2 = float.Parse(txtP2.Text);
        P = R * P2;
        txtP.Text = P.ToString();

    }
    else{
        MessageBox.Show("One or more of the fields were empty!");
    {
 }

希望这可以帮助!

于 2012-05-06T21:31:38.037 回答
0

在将Single.TryParse用户输入字符串转换为数值(在您的情况下为浮点数,而不是整数)时使用。
通常,您不能轻易阻止用户插入一些虚假值,您的代码将失败。
相反 TryParse 允许您在输入无效的情况下毫无例外地测试输入字符串

    // Try to convert the R value just one time, everything fails if this fails
    if(!Single.TryParse(txtR.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out R))
        return; 
    if(Single.TryParse(txtE2.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out E2)) 
    {
        E = R * E2; 
        txtE.Text = E.ToString(); 
    }

    if(Single.TryParse(txtD2.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out D2))
    {
        D = R * D2; 
        txtD.Text = D.ToString(); 
    }

    if(Single.TryParse(txtP2.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out P2))
    {
        P = R * P2; 
        txtP.Text = P.ToString(); 
    }

请参阅 MSDN 上的此处以获取参考

于 2012-05-06T22:11:40.153 回答