我对如何让这个程序做一些特定的事情感到困惑,还有一个问题供我自己将来参考:
问:你能用按钮做if语句吗例如: if (点击button1)这样做,否则if (button2被点击)这样做
我的程序的目标是帮助学习基本的整数数学,四个部分是加法,减法,乘法和模数。我有3个文本框,第一个是显示的问题,第二个是用户的答案,第三个是答案是否正确
我目前设置的内容:
private void button1_Click(object sender, EventArgs e)
{
Random random1 = new Random();
int randomNumber1 = random1.Next(6, 11);
Random random2 = new Random();
int randomNumber2 = random2.Next(1, 6);
textBox1.Text = "What is " + randomNumber1 + " + " + randomNumber2 + " ?";
}
private void button2_Click(object sender, EventArgs e)
{
Random random1 = new Random();
int randomNumber1 = random1.Next(6, 11);
Random random2 = new Random();
int randomNumber2 = random2.Next(1, 6);
textBox1.Text = "What is " + randomNumber1 + " - " + randomNumber2 + " ?";
}
private void button3_Click(object sender, EventArgs e)
{
Random random1 = new Random();
int randomNumber1 = random1.Next(6, 11);
Random random2 = new Random();
int randomNumber2 = random2.Next(1, 6);
textBox1.Text = "What is " + randomNumber1 + " * " + randomNumber2 + " ?";
}
private void button4_Click(object sender, EventArgs e)
{
Random random1 = new Random();
int randomNumber1 = random1.Next(6, 11);
Random random2 = new Random();
int randomNumber2 = random2.Next(1, 6);
textBox1.Text = "What is " + randomNumber1 + " % " + randomNumber2 + " ?";
}
private void button5_Click(object sender, EventArgs e)
{
Random random1 = new Random();
int randomNumber1 = random1.Next(6, 11);
Random random2 = new Random();
int randomNumber2 = random2.Next(1, 6);
if (Convert.ToInt16(textBox2.Text) == (randomNumber1) + (randomNumber2))
textBox3.Text = "Correct!";
else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) - (randomNumber2))
textBox3.Text = "Correct!";
else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) * (randomNumber2))
textBox3.Text = "Correct!";
else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) % (randomNumber2))
textBox3.Text = "Correct!";
else
textBox3.Text = "Incorrect!";
}
}}
我要做的是,如果你点击了按钮1,你点击了加法,点击了按钮2,你点击了减法,点击了按钮3,点击了乘法,点击了按钮4,点击了提交,它就会告诉你,你是否得到了正确的答案。我目前的答案在一定程度上做到了这一点,但如果答案是四种类型的问题中的任何一种,它就会显示为正确的。
例如:问题是8+3,你填5,它会说对,因为8-3等于5
发布于 2013-11-25 11:51:38
你可以尝试下面的代码,你的代码有相当多的东西是多余的,并且确定用户回答是否正确的检查机制是完全错误的:
public enum Operation {
Add,
Subtract,
Divide,
Multiply,
Modulo
}
Random rand = new Random();
private decimal GenerateQuestion(Operation o){
int a = rand.Next(6, 11);
int b = rand.Next(1, 6);
decimal result = 0;
string os = "";
switch(o){
case Operation.Add:
result = a + b;
os = "+";
break;
case Operation.Subtract:
result = a - b;
os = "-";
break;
case Operation.Multiply:
result = a * b;
os = "*";
break;
case Operation.Divide:
result = (decimal)a/b;
os = "/";
break;
case Operation.Modulo:
result = a % b;
os = "%";
break;
}
textBox1.Text = string.Format("What is {0} {1} {2}?", a,os,b);
return result;
}
decimal result;
private void button1_Click(object sender, EventArgs e)
{
result = GenerateQuestion(Operation.Add);
}
private void button2_Click(object sender, EventArgs e){
result = GenerateQuestion(Operation.Subtract);
}
private void button3_Click(object sender, EventArgs e){
result = GenerateQuestion(Operation.Multiply);
}
private void button4_Click(object sender, EventArgs e){
result = GenerateQuestion(Operation.Modulo);
}
private void button5_Click(object sender, EventArgs e){
decimal v;
if(decimal.TryParse(textBox2.Text, out v)){
textBox3.Text = (v == result) ? "Correct!" : "Incorrect!";
}else {
textBox3.Clear();
MessageBox.Show("Enter a number please!");
}
}发布于 2013-11-25 11:39:27
您可以将一个事件处理程序分配给多个按钮,然后检查EventArgs以确定是哪个按钮触发了事件,并在其中放置了适当的条件逻辑。
不确定这是ASP.NET还是WinForms,但它的工作原理如下:
btn1.Click += button_Click;
btn2.Click += button_Click;
btn3.Click += button_Click;
private void button_Click(object sender, EventArgs e)
{
var btn = sender as Button;
if (sender != null) {
if (btn is btn1) {
//do something
}
else if (btn is btn2) {
//do something
}
//etc
}
}我已经以声明方式添加了事件处理程序,但您可以通过属性对话框或在标记中完成此操作。
发布于 2013-11-25 11:41:33
您正在生成随机(*)数字来创建问题,并再次验证问题。这是完全没有意义的,因为你有一些类似“3+4是什么”的东西,并且你将结果与7 + 2或其他一些随机值进行比较。
你应该将生成的值和操作保存在一些成员变量中以供验证,或者更简单地保存预期结果。
Random random = new Random();
int expectedResult;
private void button3_Click(object sender, EventArgs e)
{
int randomNumber1 = random.Next(6, 11);
int randomNumber2 = random.Next(1, 6);
textBox1.Text = "What is " + randomNumber1 + " * " + randomNumber2 + " ?";
expectedResult = randomNumber1 * randomNumber2;
}
private void button5_Click(object sender, EventArgs e)
{
textBox3.Text =
int.Parse(textBox2.Text) == expectedResult ? "Correct!" : "Incorrect!";
}(*)请注意,由于每次调用时的代码重新启动序列,您当前的“随机”数字并不是完全随机的-因此成对的数字将非常密切地相关。请注意,为表达式生成的数字可能与为检查生成的数字不同。正确的用法是只有一个Random对象(可能是每个线程一个对象,但对于您的情况不需要担心)。
https://stackoverflow.com/questions/20184258
复制相似问题