C#,表单应用程序。在按钮单击中调用方法
我的代码是一个程序,它在单击按钮1时生成一个介于1-4之间的随机数,然后将其传递给GetQuestion,并根据随机数选择一个随机问题。然后,它应该检查textbox1以获取关于答案的输入,并检查GetAnswer函数中的答案是否正确。问题是,我似乎不知道如何将questionNum传递给GetAnswer,而不将其作为参数传递。如果我尝试将其作为参数传递,那么我的按钮2\u单击调用GetAnswer的内容将不起作用,因为方法调用需要一个参数,我不知道如何使其起作用。请帮忙C#,表单应用程序。在按钮单击中调用方法,c#,forms,C#,Forms,我的代码是一个程序,它在单击按钮1时生成一个介于1-4之间的随机数,然后将其传递给GetQuestion,并根据随机数选择一个随机问题。然后,它应该检查textbox1以获取关于答案的输入,并检查GetAnswer函数中的答案是否正确。问题是,我似乎不知道如何将questionNum传递给GetAnswer,而不将其作为参数传递。如果我尝试将其作为参数传递,那么我的按钮2\u单击调用GetAnswer的内容将不起作用,因为方法调用需要一个参数,我不知道如何使其起作用。请帮忙 pu
public struct QuestionAnswer
{
public string question;
public string answer;
}
public QuestionAnswer[] answers = new QuestionAnswer[3];
private int GetQuestion(int questionNum)
{
QuestionAnswer q1;
q1.question = "What is a salmon?";
q1.answer = "Fish";
QuestionAnswer q2;
q2.question = "How many meters is a kilometer?";
q2.answer = "1000";
QuestionAnswer q3;
q3.question = "How much is 1 + 1?";
q3.answer = "2";
answers[0] = q1;
answers[1] = q2;
answers[2] = q3;
label1.Visible = true;
if (questionNum == 1)
{
label1.Text = q1.question;
}
else if (questionNum == 2)
{
label1.Text = q2.question;
}
else
{
label1.Text = q3.question;
}
return questionNum;
}
private void GetAnswer()
{
label2.Visible = true;
string answer = textBox1.Text;
if (answer == answers[0].answer && questionNum == 1 || answer == answers[1].answer && questionNum == 2 || answer == answers[2].answer && questionNum == 3)
{
label2.Text = "Correct!";
}
else
{
label2.Text = "Wrong!";
}
}
private void button2_Click(object sender, EventArgs e)
{
GetAnswer();
}
private void button1_Click(object sender, EventArgs e)
{
label2.Visible = false;
Random rnd = new Random();
int questionNum = rnd.Next(1, 4);
GetQuestion(questionNum);
}
}
如果不想使用全局变量,可以使用标记属性
public struct QuestionAnswer
{
public string question;
public string answer;
}
private QuestionAnswer[] answers = new QuestionAnswer[3];
private int GetQuestion(int questionNum)
{
QuestionAnswer q1;
q1.question = "What is a salmon?";
q1.answer = "Fish";
QuestionAnswer q2;
q2.question = "How many meters is a kilometer?";
q2.answer = "1000";
QuestionAnswer q3;
q3.question = "How much is 1 + 1?";
q3.answer = "2";
answers[0] = q1;
answers[1] = q2;
answers[2] = q3;
label1.Visible = true;
if (questionNum == 1)
{
label1.Text = q1.question;
}
else if (questionNum == 2)
{
label1.Text = q2.question;
}
else
{
label1.Text = q3.question;
}
return questionNum;
}
private void GetAnswer(int questionNum)
{
label2.Visible = true;
string answer = textBox1.Text;
if (answer == answers[0].answer && questionNum == 1 || answer == answers[1].answer && questionNum == 2 || answer == answers[2].answer && questionNum == 3)
{
label2.Text = "Correct!";
}
else
{
label2.Text = "Wrong!";
}
}
private void button2_Click(object sender, EventArgs e)
{
if(button1.Tag != null && int.TryParse(button1.Tag?.ToString(),out int result))
GetAnswer((int)button1.Tag);
}
private void button1_Click(object sender, EventArgs e)
{
label2.Visible = false;
Random rnd = new Random();
int questionNum = rnd.Next(1, 4);
button1.Tag = questionNum;
GetQuestion(questionNum);
}
您只需使用一个字段,就像您为
答案所做的那样,来跟踪您当前的问题
现在,我已经对您的代码进行了重构,以了解如何编写此代码
private Random _rnd = new Random();
private int _questionIndex = 0;
public QuestionAnswer[] _answers = new QuestionAnswer[]
{
new QuestionAnswer() { Question = "What is a salmon?", Answer = "Fish" },
new QuestionAnswer() { Question = "How many meters is a kilometer?", Answer = "1000" },
new QuestionAnswer() { Question = "How much is 1 + 1?", Answer = "2" },
};
private void button2_Click(object sender, EventArgs e)
{
label2.Visible = true;
string answer = textBox1.Text;
label2.Text =
answer == _answers[_questionIndex].Answer
? "Correct!"
: "Wrong!";
}
private void button1_Click(object sender, EventArgs e)
{
label2.Visible = false;
label1.Visible = true;
_questionIndex = _rnd.Next(0, _answers.Length);
label1.Text = _answers[_questionIndex].Question;
}
用一个全局变量,你能给点建议吗?我尝试使用全局变量,但由于某种原因,每次我使用GetAnswer方法时,它都会生成0。您好!感谢您的时间和帮助,TryParse正在抛出错误,需要1个参数。我还不知道该怎么解决这个问题?对不起!之前有错误,代码已更新。我不认为解析是必需的,如果您在代码中的任何地方都没有设置标记属性,而不是数字,那么您可以删除该条件,嗯。。它给出了一个未处理的异常:对象引用未设置为对象的实例。单击button2之后,我认为这与“GetAnswer((int)button1.Tag);”部分有关,因为摆弄if语句仍然会产生错误。知道这是什么原因吗?嗯,修正了,除了逻辑上有问题外,它不是专门检查正确答案和正确问题,现在任何问题的正确答案都会显示“正确”谢谢,编辑成功了。非常感谢,祝你有一个愉快的一天,在那里是安全的!哦,好的,谢谢你的时间!我也将研究这种方法并找出答案。