2013-10-13 48 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 – 
} 

這樣做使它們可用(範圍內)所有類的方法。將「私人」關鍵字放在那裏讓其他人無法訪問它們。

相關問題