1

こんにちは人々私はC#の世界の初心者で、問題があります。プログラムのForm_Loadメソッドで配列を作成しましたが、次のようにpicture_boxメソッドで配列にアクセスする必要があります。

        private void Form2_Load(object sender, EventArgs e)
    {
        //In this method we get a random array to set the images

        int[] imgArray = new int[20];

        Random aleatorio = new Random();

        int num, contador = 0;

        num = aleatorio.Next(1, 21);

        imgArray[contador] = num;
        contador++;

        while (contador < 20)
        {
            num = aleatorio.Next(1, 21);
            for (int i = 0; i <= contador; i++)
            {
                if (num == imgArray[i])
                {
                    i = contador;
                }
                else
                {
                    if (i + 1 == contador)
                    {
                        imgArray[contador] = num;
                        contador++;
                        i = contador;
                    }
                }
            }
        }

    }


    private void pictureBox1_Click(object sender, EventArgs e)
    {
        pictureBox1.Image = Image.FromFile(@"C:\Users\UserName\Desktop\MyMemoryGame\" + imgArray[0] + ".jpg");
    }

しかし、私はエラーを受け取るだけです:エラー1名前'imgArray'は現在のコンテキストに存在しません

4

2 に答える 2

5

int [] imgArrayは、クラスレベル(Form2_Loadの内部ではなく)で定義する必要があります。それ以外の場合、その変数の「スコープ」はその関数に制限されます。新しい変数を宣言するだけではいけないように、Form2_Loadの最初の「int[]」部分をノックオフする必要があります。

例えば:

public class MyClass
{ 
    private int[] myInt;

    public void Form2_Load(...) {
        myInt = ...;
    }

}
于 2011-06-05T06:59:47.540 に答える
3

エラーはまさにそれが言っていることを意味します。

Form2_Load関数のスコープで配列を宣言しました。それ以外では存在しません。

達成しようとしていることを実行するには、フォーム自体にプライベート配列を追加します。

private int[] _imgArray = new int[20];

private void Form2_Load(object sender, EventArgs e)
{
    //Setup the imgArray
}

private void pictureBox1_Click(object sender, EventArgs e)
{
    //_imgArray is now available as its scope is to the class, not just the Form2_Load method

}

うまくいけば、それがお役に立てば幸いです。

于 2011-06-05T07:01:40.640 に答える