2013-10-13 65 views
3

我是一名编程初学者,所以我很抱歉如果这是一个简单的问题。我的程序在启动应用程序时会产生一个随机数学问题(另外)。用户输入他/她认为的答案。接下来,用户点击按钮并显示文本,指示用户的回答是否正确。我可以在C#中使用两个不同事件的相同局部变量吗?

我在Form Load事件中使用了变量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(); 
    } 
} 

}

+0

啊是的!谢谢philologon!我很高兴你今天教会了我一些新的东西:) – Learnin2Code

+0

无论你认为哪一个答案是最重要的,你应该通过点击左边选票按钮下的“接受答案”图标来“接受”答案。在问题至少10分钟之前,您无法做到这一点。 – philologon

+1

噢,好的,对不起,我不知道。我正在寻找一种“关闭”问题的方法。谢谢 – Learnin2Code

回答

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; 
    ... 
} 
+0

非常感谢!我很高兴你给我看了:)我不知道它是如此工作,但你每天都会学到新的东西,我想 – Learnin2Code

+1

@ user2852838这是非常基础的 - 类一直都在使用它。不过,请注意在用户界面类中使用太多这些。在学校作业中很好,但是在生产代码中,你真的希望你的GUI(即表单)尽可能与数据模型(即number1和number2)分开。 – dasblinkenlight

+0

谢谢你的帮助。我很喜欢这个网站。如此伟大的人真正关心:) – Learnin2Code

0

按钮点击事件实际上有它自己的范围内,所以你有几个选项。首先在按钮单击事件中声明变量number1和number2。

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

例如

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

    //your functions here 
} 
0

你会让他们“全局”到Form1类将它们放在与方法相同的括号内。这使他们成员字段:

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

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

相关问题