Доступ к приватному методу в C # - PullRequest
0 голосов
/ 05 июня 2011

Привет, люди. Я новичок в мире 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'не существует в текущем контексте

Ответы [ 2 ]

4 голосов
/ 05 июня 2011

Вам нужно определить int [] imgArray на уровне класса (вне Form2_Load), а не внутри него. В противном случае «область действия» этой переменной ограничена этой функцией. Вам нужно будет удалить первую часть «int []» в Form2_Load, чтобы помешать вам просто объявить новую переменную.

Например:

public class MyClass
{ 
    private int[] myInt;

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

}
3 голосов
/ 05 июня 2011

Ошибка означает именно то, что говорится.

Вы объявили массив в scope функции 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

}

Надеюсь, это поможет.

...