正在做问答游戏,但迫不及待想在按钮点击事件的循环中

时间:2019-05-02 18:55:40

标签: c# .net winforms

我有一个测验作业。已经有一种方法可以生成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;
}

1 个答案:

答案 0 :(得分:0)

我认为您可以在单击按钮而不是foreach循环时单独调用该问题,然后可以使用事件侦听器进行处理。