I have two questions:
1) Is this the correct way to make my default value = 0 for variables, then pass a value given by the user into that variable?
protected void btnCheck_Click(object sender, EventArgs e)
{
lblYesNo.Text = "";
//default int values are set to 0
int remainder = 0;
int guess = 0;
remainder = int.Parse(txtRemainder.Text);
guess = int.Parse(txtAnswer.Text);
answer = (int)Session["answer"];
if (guess == answer)
{
lblYesNo.Text = lblYesNo.Text + "Correct!";
}
else
{
lblYesNo.Text = lblYesNo.Text + "Try Again..";
}
}//END Check Answer
2) how can I stop the Check_Click(submit button) from hiding the txtRemainder(textbox)? The reason it ‘auto-hides’ now is because I set the default value to ‘txtRemainder.Visible = false;’ in the Page_Load, which will make it hide unless the math problem is division. When I click on the btnDiv_Click(divide button) it resets it to ‘txtRemainder.Visible = true;’, because this provides a division question to be solved.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class BasicMath : System.Web.UI.Page
{
int number1;
int number2;
int answer;
protected void Page_Load(object sender, EventArgs e)
{
txtRemainder.Visible = false;
}
protected void GetRandom()
{
Random rand = new Random();
number1 = rand.Next(0, 10);
number2 = rand.Next(0, 10);
txtAnswer.Text = "";
txtRemainder.Text = "";
lblYesNo.Text = "";
}//END Get Random Number
protected void btnAdd_Click(object sender, EventArgs e)
{
GetRandom();
lblEquation.Text = number1.ToString() + " + " + number2.ToString();
answer = number1 + number2;
Session["answer"] = answer;
}//END Addition Button
protected void btnSub_Click(object sender, EventArgs e)
{
GetRandom();
if (number2 > number1)
{
answer = number2 - number1;
lblEquation.Text = number2.ToString() + " - " + number1.ToString();
}
else
{
answer = number1 - number2;
lblEquation.Text = number1.ToString() + " - " + number2.ToString();
}
Session["answer"] = answer;
}//END Subtraction Button
protected void btnMult_Click(object sender, EventArgs e)
{
GetRandom();
lblEquation.Text = number1.ToString() + " x " + number2.ToString();
answer = number1 * number2;
Session["answer"] = answer;
}//END Multiplication Button
protected void btnDiv_Click(object sender, EventArgs e)
{
Random rand = new Random();
number1 = rand.Next(1, 10);
number2 = rand.Next(1, 10);
/*will only display the txtRemainder(textbox) while using the Divide button,
txtRemainder will auto-hide when using another button because
it's default setting of '.Visible = false' is placed in the Page_Load*/
txtRemainder.Visible = true;
lblEquation.Text = number1.ToString() + " / " + number2.ToString();
answer = number1 / number2;
Session["answer"] = answer;
}//END Division Button
protected void btnCheck_Click(object sender, EventArgs e)
{
lblYesNo.Text = "";
//default int values are set to 0
int remainder = 0;
int guess = 0;
remainder = int.Parse(txtRemainder.Text);
guess = int.Parse(txtAnswer.Text);
answer = (int)Session["answer"];
if (guess == answer)
{
lblYesNo.Text = lblYesNo.Text + "Correct!";
}
else
{
lblYesNo.Text = lblYesNo.Text + "Try Again..";
}
}//END Check Answer
}
If this question doesn’t make sense please ask for clarification.
Question 1:
Yes, that is the correct way to initialize your variables to default values of zero, although
intvariables are initialized to zero by default, so even if you omitted the assignment, they would still default to zero.The method you’re using to accept the user input is correct, but could throw an exception if the values entered by the user are not Int32 values (think 3.2). As it stands, you have no try..catch blocks to deal with these exceptions. You could either add these try..catch blocks, or you could use the TryParse() method to check that the values are valid. For example:
TryParse() will convert the value into the output variable if it’s a valid value & return
trueto indicate success, otherwise it will returnfalseif it was not able to perform the conversion.Question 2:
In order to hide
txtRemainderwhen the page first loads & then to keep it hidden if any button was clicked other thanbtnDiv, here is a proposed solution. First, the code:Now for some explaining. When the page initially loads, the label is hidden (by the
!IsPostBackcheck). If the request is indeed a postback, we go through the collection of returned form controls (contained in theRequest.Formcollection) & check to see if a button is present that could have caused the postback. Buttons are rendered in the HTML as<input type="submit" .. />elements, and upon postback, only the button that was clicked is sent back in theFormcollection, even if there are multiple submits on the page. A more detailed explanation can be found hereNow, if a button did indeed cause the postback, then we check to see if this button was
btnDiv. If it was, the comparison returnstrue&txtRemainderis displayed. If not, it is hidden.This way, there is no need to show or hide
txtRemainderin each event handlers. You wouldn’t even need to set it to visible in the event handler forbtnDiv.EDIT
Based on the requirement listed in the comments, I’ve altered my answer to question 2 so as to provide an alternative method to having to show or hide the label in each button event.