我正在尝试制作一个简单的计算器。 bttn_Click()中的布尔值无法正常工作。计算器应该接收值,然后在按下操作时重置。相反,计算器继续将数字附加到文本框中的值。因此,bttnEquals_Click()也不起作用。我尝试在文本框中添加不同的值,并确定布尔值是罪魁祸首。这个逻辑有问题吗? TIA
C#文件
public partial class WebForm1 : System.Web.UI.Page
{
Boolean op_pressed = false;
String operation = "";
Double result = 0.0;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void bttn_Click(object sender, EventArgs e)
{
if (op_pressed)
{
txtDisplay.Text = String.Empty;
}
Button b = (Button)sender;
txtDisplay.Text += b.Text;
}
protected void bttnClear_Click(object sender, EventArgs e)
{
txtDisplay.Text = string.Empty;
}
protected void bttnOperation_Click(object sender, EventArgs e)
{
op_pressed = true;
Button b = (Button)sender;
operation = b.Text;
result = Double.Parse(txtDisplay.Text);
}
protected void bttnEquals_Click(object sender, EventArgs e)
{
switch(operation)
{
case "+":
txtDisplay.Text = (result + Double.Parse(txtDisplay.Text)).ToString();
break;
case "-":
txtDisplay.Text = (result - Double.Parse(txtDisplay.Text)).ToString();
break;
case "*":
txtDisplay.Text = (result * Double.Parse(txtDisplay.Text)).ToString();
break;
case "/":
txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString();
break;
default:
break;
}
op_pressed = false;
}
}
}
答案 0 :(得分:2)
它确实可以帮助您在ASP.NET中每次回发时都没有正确使用它重新加载页面,因此它会在您必须使用View State
的情况下将变量重置为原始值Understanding ASP.NET View State
类似于ViewState["op_pressed"] = true;
答案 1 :(得分:0)
您没有在viewstate或其他任何地方保存op_preessed的值,因此每次单击按钮时,它都将为false。这就是为什么bttn_Click没有清除文本。解决问题的简便方法是立即在bttnOperation_Click;
中清除文本框protected void bttnOperation_Click(object sender, EventArgs e)
{
op_pressed = true;
txtDisplay.Text = String.Empty;
Button b = (Button)sender;
operation = b.Text;
result = Double.Parse(txtDisplay.Text);
}
答案 2 :(得分:0)
您不能将状态存储在Page类中的变量中,并期望它们在HTTP请求之间完整可用。根据你想要做的事情,我只能假设你正在学习,这很好(否则,你的计算器解决方案,在架构上,并不好;但是,让&# 39;继续,无论如何;我不批评)。
这是因为,在这些点击事件之间,您有服务器向浏览器提供HTML,而它没有维护(记住)状态(结果,操作等)。为了使它“记住”#34;状态(再次,使用您的架构),您可以使用" ASP.NET Session"。
因此,例如,要在会话中存储内容:
this.Session["op_pressed"] = true;
然后,回读先前存储的值:
object value = this.Session["op_pressed"];
// you cannot assume it exists; it may be NULL
// so, cast (convert) to type that you believe it to be
// e.g:
bool pressed;
bool worked = bool.TryParse(this.Session["op_pressed"], out pressed);
if(!worked)
{
pressed = false; // default; first-time
}
// process "pressed" here
换句话说,将这些变量移到"会话":
Boolean op_pressed = false;
String operation = "";
Double result = 0.0;