我有一个测验作业。已经有一种方法可以生成20个随机问题ID,然后将其发送到sql server,通过查询,我可以在数组中获取问题和可能的答案。但是我将其像一个游戏一样,因此一个按钮将启动并逐步回答问题,一个按钮将保存所选答案,并检查其是否正确。目前,我正在考虑使用带有预生成问题ID的for循环来获取和显示问题/答案,然后在用户单击另一个ubtton之后,它将自动进入下一个问题。因此,需要一种等待按钮按下的方法,或者使用更好的解决方案来代替foreach循环。我只是一个接一个地使用getquest方法,所以一个get方法,一个检查它是否正确,然后再检查下一个。
尝试使用异步方法没有成功。
private void button1_Click(object sender, EventArgs e)
{
//foreach (var item in Random())
//{
DisplayAnswers(1);
_wait.WaitOne();
DisplayAnswers(2);
_wait2.Set();
// }
}
private async void button2_Click(object sender, EventArgs e)
{
CheckAnswer(1);
_wait.Set();
_wait2.WaitOne();
CheckAnswer(1);
}
public void DisplayAnswers(int questionid)
{
label1.Text = data.GetAnswers(questionid)[0];
label2.Text = data.GetAnswers(questionid)[1];
label3.Text = data.GetAnswers(questionid)[2];
label4.Text = data.GetAnswers(questionid)[3];
mentettvalasz = false;
}
public void CheckAnswer(int questionid)
{
if (valasz1.Checked == true)
{
answernumber = 1;
}
if (valasz2.Checked == true)
{
answernumber = 2;
}
if (valasz3.Checked == true)
{
answernumber = 3;
}
if (valasz4.Checked == true)
{
answernumber = 4;
}
if (answernumber == data.GetCorrectAnswerID(questionid))
{
MessageBox.Show("jo valasz!");
}
else if (answernumber != data.GetCorrectAnswerID(questionid))
{
MessageBox.Show("Nem jo valasz!");
}
mentettvalasz = true;
}
public int[] Random()
{
int x = 0;
x =+ data.GetQuestionAmount(1);
x =+ +data.GetQuestionAmount(2);
x =+ +data.GetQuestionAmount(3);
x =+ +data.GetQuestionAmount(4);
x =+ +data.GetQuestionAmount(5);
x =+ +data.GetQuestionAmount(6);
Random rnd = new Random();
int[] questionarray = new int[20];
for (int i=0; i<20;i++)
{
questionarray[i]=rnd.Next(1, x);
}
return questionarray;
}
答案 0 :(得分:0)
我认为您可以在单击按钮而不是foreach循环时单独调用该问题,然后可以使用事件侦听器进行处理。