3

プログラミング初心者なので、簡単な質問ですみません。私のプログラムは、アプリケーションの起動時に (さらに) ランダムな数学の問題を生成します。ユーザーは、答えだと思うものを入力します。次に、ユーザーがボタンをクリックすると、ユーザーの回答が正しいかどうかを示すテキストが表示されます。

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();
    }
}

}

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 に答える