3

我是编程初学者,所以如果这是一个简单的问题,我很抱歉。我的程序在启动应用程序时会生成一个随机数学问题(另外)。用户输入他/她认为是答案的内容。接下来,用户点击一个按钮并显示文本,指示用户的答案是否正确。

我在表单加载事件中使用了变量 number1 和 number2。如何在按钮单击事件中轻松再次使用它们?

(希望我的代码演示了我正在尝试做的事情).....

    public Form1()
    {
        InitializeComponent();
    }
    //New Method
    private void GenerateRandoms()
    {
        // create random number variable
        Random randomNumber = new Random();
        int number1; 
        int number2; 

        number1 = randomNumber.Next(100, 501);
        number2 = randomNumber.Next(100, 501);

        randomProblemLeft.Text = number1.ToString();
        randomProblemRight.Text = number2.ToString(); 
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        // Call created method so random numbers are generated once form loads.
        GenerateRandoms();
    }

    private void checkButton_Click(object sender, EventArgs e)
    {
        int rightAnswer; //The correct answer for the addition problem
        int theirAnswer; // The answer given by the user

        theirAnswer = int.Parse(answerInput.Text);

        rightAnswer = (number1 + number2); //Trying to reuse these variables from first event????????????

        if (rightAnswer == theirAnswer)
        {
            checkOutput.Text = "Yes, that is the correct answer!";
        }
        else
        {
            checkOutput.Text = "Sorry, that is incorrect!";
        }
    }

    private void clearButton_Click(object sender, EventArgs e)
    {
        answerInput.Text = "";
        checkOutput.Text = "";
        GenerateRandoms();
    }

    private void exitButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

}

4

3 回答 3

0

按钮单击事件实际上有自己的范围,因此您有几个选项。首先在按钮单击事件中再次声明变量 number1 和 number2。

如果您希望这些值由于某种原因持续存在,那么您需要在类的范围内声明 number1 和 number2。这将使它们成为您创建的对象的一部分。

例子

public class Form1()
{
   private int number1;
   private int number2;

   //your functions here
}
于 2013-10-13T02:38:03.633 回答
0

局部变量一旦超出范围就会消失(即在到达声明局部的块的右花括号之后)。它们的值被丢弃,无法恢复。这就是局部变量在这种情况下不起作用的原因:您需要将它们设为实例变量。

在类级别将变量声明为私有,从方法中删除声明,并在任何方法中使用实例变量:

private int number1; // Declared at the form level
private int number2; 
private void GenerateRandoms()
{
    // create random number variable
    Random randomNumber = new Random();
    number1 = randomNumber.Next(100, 501);
    number2 = randomNumber.Next(100, 501);
    ...
}
private void checkButton_Click(object sender, EventArgs e)
{
    int answer = number1 + number2;
    ...
}
于 2013-10-13T02:38:45.587 回答
0

通过将它们放在与方法相同的括号级别,您可以使它们对 Form1 类“全局”。这使它们成为成员字段:

class Form1 
{
   private int number1; 
   private int number2; 
   // . . . the rest of the class goes here –
}

这样做可以使它们(在范围内)可用于所有类方法。将“private”关键字放在那里可以让其他人无法访问它们。

于 2013-10-13T02:41:23.450 回答