Windows窗体中的测验。检查按钮是否正确答案

时间:2013-12-19 13:46:20

标签: c# button click

我正在做一个“谁想要成为一个百万富翁”的游戏,我一直坚持如何检查答案是否是正确的答案。

我已经制作了struct我可以用来创建一些看起来像这样的问题:

struct Question
{
    public string question, ansA, ansB, ansC, ansD;
    public int correctAnswer;
}

然后我提出这样的问题:

Question ett = new Question();    
ett.question = "Who is the richest?";
ett.ansA = "XXXX";
ett.ansB = "god";
ett.ansC = "vit";
ett.ansD = "röd";
ett.correctAnswer = 1;

然后我把它们放在一个列表中并从那里检索一个随机问题。标签中的问题和四个不同按钮的答案。

Random rnd = new Random();
int number = rnd.Next(0, NumberOfquestions+1);
var question = QuestionList[number];

lblquestion.Text = question.question;
button1.Text = question.ansA;
button2.Text = question.ansB;
button3.Text = question.ansC;
button4.Text = question.ansD;

变量名称不是100%正确,因为我已经更改它们以便您理解它们,因为我的语言中有变量。

我一直坚持如何检查点击的按钮是否正确,我对此有一些想法,但我不确定这是否有用或是否有更好的方法可以做到。

我想到的一件事是制作一个方法,检查它是否正确,如果按钮返回1-4之间的值,并将其与int correctAnswer中的struct进行核对。

public int button1_Click(object sender, EventArgs e)
{
   return 1; 
}

我想到的另一件事是,如果我可以制作一个包含游戏中所有正确答案的方法,并搜索一下是否与我按钮上的文字相匹配? 也许不是最好的使用方法。

namespace quiz
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            programmet();
        }

        public void btnNewGame_Click(object sender, EventArgs e)
        {

        }

        public void BtnAvsluta_Click(object sender, EventArgs e)
        {
            this.Dispose();
            this.Close();
        }

        public void programmet()
        {
            Question ett = new Question();
            ett.fråga = "who is richest ?";
            ett.svarA = "XXXX";
            ett.svarB = "god";
            ett.svarC = "vit";
            ett.svarD = "röd";
            ett.rättsvar = 1;



            var QuestionList = new List<Question>();
            QuestionList.Add(ett);
            QuestionList.Add(tre);
            QuestionList.Add(fyra);
            QuestionList.Add(fem);

            Random rnd = new Random();
            int number = rnd.Next(0, numberOfQuestions -1);
            var currentQuestion = QuestionList[number];

            lblFråga.Text = currentQuestion.fråga;
            button1.Text = currentQuestion.svarA;
            button2.Text = currentQuestion.svarB;
            button3.Text = currentQuestion.svarC;
            button4.Text = currentQuestion.svarD;
        }

        public void button1_Click(object sender, EventArgs e)
        {
           /// here I want to use CurrentQuestion.question etc. 
           /// to do the "if(currentquestion.ansA == 1)"
        }

    }
}

4 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案:

定义一个变量来存储当前问题(currentQuestion),该问题可以从每个按钮的Click事件处理程序以及您选择问题的方法中访问。

public void button1_Click(object sender, EventArgs e) { 
   if (currentQuestion.correctAnswer == 1)
      CorrectAnswer();
   else
      WrongAnswer();
}

public void button2_Click(object sender, EventArgs e) { 
   // same for button2 ...
}

答案 1 :(得分:0)

您可以指定答案按钮的Tagbutton1.Tag = 1button2.Tag = 2等。然后,对于所有答案按钮,将Click事件设置为相同的方法,例如

void Answer_Click(object sender, EventArgs e)

在方法正文中,您可以使用...

访问所点击按钮的Tag
int selectedAnswer = (int)((Button)sender).Tag;

要访问您当前的问题,请在Form1课程中创建一个私有媒体资源或字段:

private Question CurrentQuestion;

并在programmet()方法中,像这样分配:

this.CurrentQuestion = QuestionList[number];

...所以你可以使用

if (CurrentQuestion.correctAnswer == selectedAnswer) { ... }

答案 2 :(得分:0)

另一种方法是当您将答案加载到表单上时,将相应按钮的标记设置为true,其余为false。现在,在常见的单击事件处理程序中,检查发送者的标记值是否转换为按钮,您的答案是否正确

答案 3 :(得分:0)

为什么不创建两个名为CorrectAnswer()和IncorrectAnswer()的方法,并从每个按钮单击调用相应的方法。像这样。

public void button1_Click(object sender, EventArgs e) { 
//if answer is correct
CorrectAnswer();

public void button2_Click(object sender, EventArgs e) { 
//if answer is incorrect
IncorrectAnswer();

希望这会有所帮助