计算器运行时错误
本文关键字:运行时错误 计算器 | 更新日期: 2023-09-27 18:32:05
今天早上,我创建了一个Windows表单项目,根据我所学到的知识制作一个计算器,并自学一些编程。
一切都很好,我可以让数字按钮打印文本框中的特定数字,操作员按钮清除文本框,以便您可以写第二个数字,但是当我按 equal"=" 时,我得到这个运行时错误:
值不能为空。参数名称:字符串
我将向您展示form1类中的代码(像往常一样,这是我唯一必须编辑的类):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<string> theNumberList = new List<string>();
public string numbers = null;
int number1, number2;
string num1, num2, operat;
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
theNumberList.Add("1");
ShowNumbers(theNumberList, numbers, textBox1);
}
public static void ShowNumbers(List<string> theList, string aString, TextBox textBox)
{
foreach(string number in theList)
{
aString = aString + number;
textBox.Text = aString;
}
}
private void button2_Click(object sender, EventArgs e)
{
theNumberList.Add("2");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button3_Click(object sender, EventArgs e)
{
theNumberList.Add("3");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button4_Click(object sender, EventArgs e)
{
theNumberList.Add("4");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button5_Click(object sender, EventArgs e)
{
theNumberList.Add("5");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button6_Click(object sender, EventArgs e)
{
theNumberList.Add("6");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button7_Click(object sender, EventArgs e)
{
theNumberList.Add("7");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button8_Click(object sender, EventArgs e)
{
theNumberList.Add("8");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button9_Click(object sender, EventArgs e)
{
theNumberList.Add("9");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void button0_Click(object sender, EventArgs e)
{
theNumberList.Add("0");
ShowNumbers(theNumberList, numbers, textBox1);
}
private void Plus_Click(object sender, EventArgs e)
{
num1 = numbers;
theNumberList.Clear();
num2 = numbers;
operat = "+";
}
private void Subtract_Click(object sender, EventArgs e)
{
}
private void Multiply_Click(object sender, EventArgs e)
{
}
private void Divide_Click(object sender, EventArgs e)
{
}
private void Equal_Click(object sender, EventArgs e)
{
int result;
switch (operat)
{
case "+":
number1 = int.Parse(num1);
number2 = int.Parse(num2);
result = number1 + number2;
theNumberList.Clear();
textBox1.Text = result.ToString();
break;
}
}
}
所以这是代码,错误出现在"number1 = int.parse(num1);"Equal_click这里:
private void Equal_Click(object sender, EventArgs e)
{
int result;
switch (operat)
{
case "+":
number1 = int.Parse(num1);
number2 = int.Parse(num2);
result = number1 + number2;
theNumberList.Clear();
textBox1.Text = result.ToString();
break;
}
}
我不知道如何解决它,有什么问题?
您收到异常num1
因为 null。 在此函数中:
public static void ShowNumbers(List<string> theList, string aString, TextBox textBox)
{
foreach(string number in theList)
{
aString = aString + number;
textBox.Text = aString;
}
}
您正在设置 aString 的值,但不是 numbers
的值。 请参阅此答案,了解为什么以这种方式传递字符串不起作用。 您需要将其更改为使用 numbers
变量。 请注意,我们还使它成为成员函数而不是静态函数:
public void ShowNumbers()
{
foreach(string number in theNumberList)
{
numbers = numbers + number;
textBox1.Text = numbers;
}
}
此外,还有另一个问题。 您需要在按 =
时分配num2
,而不是在按 +
时分配。
这意味着您的 num1 很可能为空,并且无法将空字符串转换为数字。
int
.解析可以解析处于数字模式的字符串,如 => "9"所以当 num1 为空或 num1 = " 时;int.parse,无法将其解析为 int
试试这个
而不是解析,你应该使用TryParse
int.TryParse(string,out int)