Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一次又一次地获取格式化异常_C#_Formatexception - Fatal编程技术网

C# 一次又一次地获取格式化异常

C# 一次又一次地获取格式化异常,c#,formatexception,C#,Formatexception,我在计算不同物体的面积。所有这些对象都有自己的WinForm。我想在CalculationBase类中进行计算,但当我尝试这样做时,我总是通过FormatException收到一条消息。以下是我的代码: 在myProgram.cs中,我创建了一个对我要计算的表单的引用 static class Program { public static frmRectangle formRect; [STAThread] static void Mai

我在计算不同物体的面积。所有这些对象都有自己的
WinForm。
我想在
CalculationBase
类中进行计算,但当我尝试这样做时,我总是通过
FormatException收到一条消息。
以下是我的代码:

在my
Program.cs
中,我创建了一个对我要计算的表单的引用

static class Program
    {
        public static frmRectangle formRect;
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            formRect = new frmRectangle();

            Application.Run(new frmMain());
        }
    }
CalculationBase
class I中,变量声明为
double Width,height我输入了以下代码来进行计算:

private void Calculations()
        {
            FormCheck();
            if (rect)
            {

                Debug.WriteLine("Rectangular is open");

                // Area
                Program.formRect.txtFormArea.Text = string.Format("A = {0} * {1}", b, h);
                if (millimeters)
                    i = (int)Math.Pow(10, 2);
                else if (centimeters)
                    i = (int)Math.Pow(10, 4);

                areaPrimair = Math.Round((b * h), 4);
                areaSecundair = Math.Round((areaPrimair / i), 4);

                Program.formRect.txtAreaPrimair.Text = areaPrimair.ToString();
                Program.formRect.txtAreaSecundair.Text = areaSecundair.ToString();
            }
        }
在ClickEvent中调用此函数:

private void btnCalculate_Click(object sender, EventArgs e)
        {
                try
                {
                    breadth = double.Parse(Program.formRect.txtBreadthInput.Text);
                    height = double.Parse(Program.formRect.txtHeightInput.Text);

                    Calculations();
                }
                catch(FormatException)
                {
                    MessageBox.Show("Some values are invalid. Please check your input.", "Invalid value");
                }
            }
        }

如前所述,我的程序一直显示FormatException的消息。

当您将空字符串或非数字字符串传递给
Double.Parse(“”
)时,您将得到一个FormatException。
在按下按钮进行调试之前,请确保输入的是双字符串。您在哪里发现异常发生?如果将b和h传递给计算,为什么要在那里再次解析它?简而言之:
Program.formRect.txtBreadthInput.Text
和/或
Program.formRect.txtHeightInput.Text
不以有效格式表示
双精度
。也许您的文化背景是
en us
,但用户输入了
1.000,50
,这在德国是有效的f.e.。在事件中的计算行上放置一个断点,然后读取宽度和高度值。@TimSchmelter对双重解析表示抱歉,我只是按现在的方式更新了代码。@FJPoort:问题肯定出在
double.Parse中(Program.formRect.txtBreadthInput.Text);
或下一行。因此,您应该向我们显示您正在使用的区域性以及用户输入的内容(两个字符串值
txtBreadthInput.Text
txtHeightInput.Text
)。您还应该;)输入始终是双精度的,但仍然得到formatexception。如前所述,当我在try块上使用断点并读取文本框的值时,它说这是一个空字符串…检查您的代码中的textfield名称是否与winforms项目匹配您可以将这些行注释掉b=width;h=高度;从ur计算方法