解析文本时发生System.FormatException
我是新来的C#,所以请善待。我正在为我的编程课程进行任务,并且不能在我的生活中找出问题所在。该程序是一个计算器,它接受来自两个文本框的输入并对其进行操作,并禁用第二个文本框并使用按钮输入数字(数字键盘)。我正在使用Visual Studio 2013,并多次遍历我的代码并逐步完成。这里是我的代码:解析文本时发生System.FormatException
static int checkFocusedTextbox = 1;
string operationPerformed;
double result = 0;
private void Operator_Click(object sender, RoutedEventArgs e)
{
// try
// {
Button button = (Button)sender;
operationPerformed = button.Content.ToString();
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
if (checkFocusedTextbox == 1)
{
if ((inputOne.Text == "") || (inputTwo.Text == ""))
{
error.Text = "Please fill both text fields";
}
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
{
switch ((string)button.Tag)
{
case "+":
inputOne.Clear();
inputTwo.Focus();
result = num1 + num2;
break;
case "-":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "*":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "/":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1/num2;
break;
case "%":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 % num2;
break;
default:
break;
}
output.Text = result.ToString();
}
}
else
{
Calculation(num1, num2);
output.Text = result.ToString();
}
}
public void Calculation(double number1, double number2)
{
switch (operationPerformed)
{
case "+":
result = number1 + number2;
break;
case "-":
result = number1 - number2;
break;
case "*":
result = number1 * number2;
break;
case "/":
result = number1/number2;
break;
case "%":
result = number1 % number2;
break;
default:
break;
}
}
public void CalculationNumberpad()
{
}
private void NumberPad_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
}
private void inputTwo_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 2;
}
private void inputOne_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 1;
}
}
}
Button类成功地检索按钮点击头到operationPerformed变量。这已经在我的代码的顶部作为字符串声明,所以我不明白为什么我使用ToString()后出现错误。然后进入num1 double并给出错误。
我迫切需要帮助,我知道这个社区是最好的!如果我遗漏了任何信息,请原谅我。
谢谢, 克里斯
你这样做:
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
您检查之前inputOne或inputTwo的内容是否为空或不。如果其中任一个为空或者包含不能被解析为双精度的字符串,则解析线会抛出System.FormatException异常。
看看double.TryParse来检查是否有可分析的东西,而不会引发异常。因此,像:
double num1, num2;
if (double.TryParse(inputOne.Text, out num1) && double.TryParse(inputTwo.Text, out num2))
{ ... values are valid, so do things}
else
{ ... at least one value is not valid... warn user }
这些条件是错误的: (!inputOne.Text = “”)|| (inputTwo.Text!=“”)
要测试字符串是否相等,请使用str1.Equals(str2); 也与A ||相反B is!A & &!B
更好的测试是string.IsNullorEmpty(teststring);
你在这里做这个
inputOne.Clear(); // this makes the TextBox empty
那么这
num2 = double.Parse(inputOne.Text); // How can you parse an empty text
变化像
case "-":
num2 = double.Parse(inputOne.Text); // First take the value
inputOne.Clear(); // Then clear
result = num1 + num2; // Then Calculate
break;
。
而对于这里的比较
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
您已经证实,这两个文本框填写,那么这将永远是true,所以只是一个简单的其他就足够了。
与
else // that's enough
替换行。
虽然从按钮取签运营商这里
switch ((string)button.Tag)
它不是标签需要。你需要的是按钮
改变,要
switch ((string)button.Content.ToString())
的内容。
如何填写inputTwo TextBox?
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
这里你唯一的选择,以填补inputOne
所以更改喜欢这里
Button button = (Button)sender;
if (checkFocusedTextbox == 1)
inputOne.Text += button.Content.ToString();
else
inputTwo.Text += button.Content.ToString();