对于C#来说,我是一个绝对的初学者。试图通过例子学习。所以我发现自己是一个不错的小计算器教程。在最后一刻,一切都很顺利,代码正在运行,但它不会像33
那样进行多位数输入。那里有一个bool语句用于打开/关闭算术运算和教师指导,我们应该在数字输入/按钮按下之前放入bool = false
(在button_Click
中)。
他的代码如下:
public partial class MainWindow : Window
{
double value = 0;
string operation = "";
bool operation_pressed = false;
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
if ((tb.Text == "0") || (operation_pressed == true))
tb.Clear();
operation_pressed = false;
Button b = (Button)sender;
tb.Text += "\n" + b.Content.ToString();
}
private void operator_Click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
operation = b.Content.ToString();
value = double.Parse(tb.Text);
operation_pressed = true;
equation.Content = value + " " + operation;
}
private void result_Click(object sender, RoutedEventArgs e)
{
equation.Content = "";
switch(operation)
{
case "+":
tb.Text = "\n" + (value + double.Parse(tb.Text)).ToString();
break;
case "-":
tb.Text = "\n" + (value - double.Parse(tb.Text)).ToString();
break;
case "*":
tb.Text = "\n" + (value * double.Parse(tb.Text)).ToString();
break;
case "/":
tb.Text = "\n" + (value / double.Parse(tb.Text)).ToString();
break;
default:
break;
}
}
private void CE_Click(object sender, RoutedEventArgs e)
{
tb.Text = "\n 0";
}
private void C_Click(object sender, RoutedEventArgs e)
{
tb.Clear();
equation.Content = "";
value = 0;
}
}
编译得很好。但是,当我尝试输入一个多位数并使用数学运算符跟随它时,它会抛出value = double.Parse(tb.Text);
的异常,指出:
将字符串转换为DateTime时,解析字符串以在将每个变量放入
DateTime
对象之前获取日期。
我现在很困惑。甚至没有涉及DateTime
!而且我100%肯定,一切都像教程中一样。发生了什么事? :/
任何帮助都将受到极大的赞赏!
修改
实际错误的屏幕截图:
答案 0 :(得分:5)
首先,您不正确地解释调试器。这是不错误消息:
将字符串转换为DateTime时,解析字符串以在将每个变量放入DateTime对象之前获取日期。
请注意它是如何列为"故障排除提示"。在绝大多数情况下,您可以忽略它。错误信息本身是一种我不知道的语言,因此我无法说出它所说的内容。但FormatException
本质上意味着您正在尝试解析无法解析的值。
您的屏幕截图会切断一些信息,但tb.Text
的价值是多少?它是那些"+"
字符串中的一个吗?如果是这样,那就是你的问题。
"+"
无法解析为数值,因为" +"不是一个数字。
使用TryParse
代替Parse
,您可以使代码更能抵御错误。像这样:
double result;
if (!double.TryParse(tb.Text, out result))
{
// couldn't parse
}
如果未输入if
块,则result
将包含成功解析的值。如果输入 ,则无法解析该值。你如何处理这种情况取决于你。给用户的错误消息,默认值而不是解析的值等。您可以定义的应用程序逻辑。
重点是,tb.Text
包含一个非数字值,您尝试将其转换为数值。因此错误。
答案 1 :(得分:0)
在operator_Click事件中尝试此代码
Button b = (Button)sender;
operation = b.Text;
value = Convert.ToDouble(tb.text)