我正在尝试让我的记忆功能在 C# 计算器上运行
I'm trying to get my memory functions to work on a C# calculator
这是我到目前为止的代码,正如您可能看到的那样,我对编码还很陌生,而且这段代码无法正常工作。真的在寻找一些帮助或提示。
如果单击,记忆功能仅显示 0,并且根本不工作。
所有这些功能的其余部分都按计划工作。
编辑:我已经更新了代码。 decimal和double好像有点问题
public partial class Form1 : Form
{
Double ResultaatWaarde = 0;
decimal EindResult = 0;
decimal MemoryStore = 0;
string FunctieVoltooid = "";
bool isFunctieVoltooid = false;
public Form1()
{
InitializeComponent();
TopMost = true;
}
// Nummers /. Getalen
private void button_click(object sender, EventArgs e)
{
if ((textBox_Resultaat.Text == "0") || (isFunctieVoltooid))
textBox_Resultaat.Clear();
isFunctieVoltooid = false;
Button button = (Button)sender;
if(button.Text == ",")
{
if (!textBox_Resultaat.Text.Contains(","))
textBox_Resultaat.Text = textBox_Resultaat.Text + button.Text;
}
else
textBox_Resultaat.Text = textBox_Resultaat.Text + button.Text;
}
// Functies
private void Functie_click(object sender, EventArgs e)
{
Button button = (Button)sender;
if (ResultaatWaarde != 0)
{
buttonIS.PerformClick();
FunctieVoltooid = button.Text;
HuidigeProcess.Text = ResultaatWaarde + " " + FunctieVoltooid;
isFunctieVoltooid = true;
}
else
{
FunctieVoltooid = button.Text;
ResultaatWaarde = Double.Parse(textBox_Resultaat.Text);
HuidigeProcess.Text = ResultaatWaarde + " " + FunctieVoltooid;
isFunctieVoltooid = true;
}
}
//Clear Entries knop
private void buttonClearEntries_Click(object sender, EventArgs e)
{
textBox_Resultaat.Text = "0";
}
// Clear Knop
private void buttonClear_Click(object sender, EventArgs e)
{
textBox_Resultaat.Text = "0";
ResultaatWaarde = 0;
HuidigeProcess.Text = "";
}
// = Knop
private void buttonIS_Click(object sender, EventArgs e)
{
switch(FunctieVoltooid)
{
case "+":
textBox_Resultaat.Text = (ResultaatWaarde + Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "-":
textBox_Resultaat.Text = (ResultaatWaarde - Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "*":
textBox_Resultaat.Text = (ResultaatWaarde * Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "/":
textBox_Resultaat.Text = (ResultaatWaarde / Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "x²":
textBox_Resultaat.Text = (ResultaatWaarde * ResultaatWaarde).ToString();
break;
case " √":
textBox_Resultaat.Text = (Math.Sqrt(double.Parse(textBox_Resultaat.Text))).ToString();
break;
case "1/x":
textBox_Resultaat.Text = (1 / ResultaatWaarde).ToString();
break;
default:
break;
}
ResultaatWaarde = Double.Parse(textBox_Resultaat.Text);
HuidigeProcess.Text = "";
}
// Memory knoppen
private void memory_Click(object sender, EventArgs e)
{
Button gedruktebutton = (Button)sender;
string ButtonText = gedruktebutton.Text;
if (ButtonText == "MC")
{
//Memory Clear
MemoryStore = 0;
return;
}
if (ButtonText == "MR")
{
//Memory Recall
txtDisplay.Text = MemoryStore.ToString();
return;
}
if (ButtonText == "MS")
{
MemoryStore = Decimal.Parse(txtDisplay.Text);
return;
}
if (ButtonText == "M-")
{
// Memory subtract
MemoryStore = ResultaatWaarde;
MemoryStore -= EindResult;
txtDisplay.Text = MemoryStore.ToString();
return;
}
if (ButtonText == "M+")
{
// Memory add
MemoryStore += EindResult;
txtDisplay.Text = MemoryStore.ToString();
return;
}
}
private void textBox_Resultaat_TextChanged(object sender, EventArgs e)
{
}
}
}
MemoryStore
和EindResult
都被声明为局部变量(在函数memory_Click内)。每次按下记忆按钮时都会调用此函数(基于名称),每次按下它们时,首先发生的事情是:
decimal EindResult = 0;
decimal MemoryStore = 0;
所以基本上,虽然您可以根据按钮按下来存储值,但当您下次调用代码时,所有这些都会首先清零。解决此问题的一种方法是将 EindResult
和 MemoryStore
移动到 class 级别(在声明 ResultaatWaarde
的位置下)。这样,只要表单处于活动状态,这些值就会继续存在。
这是我到目前为止的代码,正如您可能看到的那样,我对编码还很陌生,而且这段代码无法正常工作。真的在寻找一些帮助或提示。 如果单击,记忆功能仅显示 0,并且根本不工作。 所有这些功能的其余部分都按计划工作。 编辑:我已经更新了代码。 decimal和double好像有点问题
public partial class Form1 : Form
{
Double ResultaatWaarde = 0;
decimal EindResult = 0;
decimal MemoryStore = 0;
string FunctieVoltooid = "";
bool isFunctieVoltooid = false;
public Form1()
{
InitializeComponent();
TopMost = true;
}
// Nummers /. Getalen
private void button_click(object sender, EventArgs e)
{
if ((textBox_Resultaat.Text == "0") || (isFunctieVoltooid))
textBox_Resultaat.Clear();
isFunctieVoltooid = false;
Button button = (Button)sender;
if(button.Text == ",")
{
if (!textBox_Resultaat.Text.Contains(","))
textBox_Resultaat.Text = textBox_Resultaat.Text + button.Text;
}
else
textBox_Resultaat.Text = textBox_Resultaat.Text + button.Text;
}
// Functies
private void Functie_click(object sender, EventArgs e)
{
Button button = (Button)sender;
if (ResultaatWaarde != 0)
{
buttonIS.PerformClick();
FunctieVoltooid = button.Text;
HuidigeProcess.Text = ResultaatWaarde + " " + FunctieVoltooid;
isFunctieVoltooid = true;
}
else
{
FunctieVoltooid = button.Text;
ResultaatWaarde = Double.Parse(textBox_Resultaat.Text);
HuidigeProcess.Text = ResultaatWaarde + " " + FunctieVoltooid;
isFunctieVoltooid = true;
}
}
//Clear Entries knop
private void buttonClearEntries_Click(object sender, EventArgs e)
{
textBox_Resultaat.Text = "0";
}
// Clear Knop
private void buttonClear_Click(object sender, EventArgs e)
{
textBox_Resultaat.Text = "0";
ResultaatWaarde = 0;
HuidigeProcess.Text = "";
}
// = Knop
private void buttonIS_Click(object sender, EventArgs e)
{
switch(FunctieVoltooid)
{
case "+":
textBox_Resultaat.Text = (ResultaatWaarde + Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "-":
textBox_Resultaat.Text = (ResultaatWaarde - Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "*":
textBox_Resultaat.Text = (ResultaatWaarde * Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "/":
textBox_Resultaat.Text = (ResultaatWaarde / Double.Parse(textBox_Resultaat.Text)).ToString();
break;
case "x²":
textBox_Resultaat.Text = (ResultaatWaarde * ResultaatWaarde).ToString();
break;
case " √":
textBox_Resultaat.Text = (Math.Sqrt(double.Parse(textBox_Resultaat.Text))).ToString();
break;
case "1/x":
textBox_Resultaat.Text = (1 / ResultaatWaarde).ToString();
break;
default:
break;
}
ResultaatWaarde = Double.Parse(textBox_Resultaat.Text);
HuidigeProcess.Text = "";
}
// Memory knoppen
private void memory_Click(object sender, EventArgs e)
{
Button gedruktebutton = (Button)sender;
string ButtonText = gedruktebutton.Text;
if (ButtonText == "MC")
{
//Memory Clear
MemoryStore = 0;
return;
}
if (ButtonText == "MR")
{
//Memory Recall
txtDisplay.Text = MemoryStore.ToString();
return;
}
if (ButtonText == "MS")
{
MemoryStore = Decimal.Parse(txtDisplay.Text);
return;
}
if (ButtonText == "M-")
{
// Memory subtract
MemoryStore = ResultaatWaarde;
MemoryStore -= EindResult;
txtDisplay.Text = MemoryStore.ToString();
return;
}
if (ButtonText == "M+")
{
// Memory add
MemoryStore += EindResult;
txtDisplay.Text = MemoryStore.ToString();
return;
}
}
private void textBox_Resultaat_TextChanged(object sender, EventArgs e)
{
}
}
}
MemoryStore
和EindResult
都被声明为局部变量(在函数memory_Click内)。每次按下记忆按钮时都会调用此函数(基于名称),每次按下它们时,首先发生的事情是:
decimal EindResult = 0;
decimal MemoryStore = 0;
所以基本上,虽然您可以根据按钮按下来存储值,但当您下次调用代码时,所有这些都会首先清零。解决此问题的一种方法是将 EindResult
和 MemoryStore
移动到 class 级别(在声明 ResultaatWaarde
的位置下)。这样,只要表单处于活动状态,这些值就会继续存在。