Доступ к динамическому управлению вне метода, который его создает - PullRequest
0 голосов
/ 22 октября 2010

Пожалуйста, помогите! Я не знаю, может быть, это слишком просто, но я не могу понять это правильно и, похоже, не могу найти правильный ответ на других постах. Я относительно новичок в C # и программирую только для хобби, это мой первый пост.

У меня есть этот метод CreateMap () внутри класса Met, где у меня есть все мои методы. Он создает массив динамических пользовательских элементов управления (stockBox []) и добавляет их на панель макета таблицы (boxContainer), которая находится внутри формы. Этот метод запускается при открытии приложения. Я заставляю все работать нормально, ПРОБЛЕМА заключается в том, что я хочу получить доступ к элементам управления stockBox из другого метода в том же классе. Я не вижу stockBox с IntelliSense, и он говорит, что его не существует!

public static class Met
{
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer)
    {
        StockBox[] stockBox = new StockBox[Var.stockCount + 1];

        for (int i = 1; i <= Var.stockCount; i++)
        {
            stockBox[i] = new StockBox();
            stockBox[i].StockText = stock[i];
            boxContainer.Controls.Add(stockBox[i]);
        }

        return stockBox;
    }
}

Невозможно поместить StockBox [] stockBox = new StockBox [Var.stockCount + 1] вне метода, потому что тогда Var.stockCount равен 0 и он создаст массив только с одним объектом.

Есть идеи? Что ты думаешь я могу сделать? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 22 октября 2010

Существует несколько способов решения проблемы. Вы не можете получить доступ к какой-либо переменной, определенной внутри функции, которая делает область действия переменной. Область действия - это концепция, которая позволяет существовать переменным в ограниченных разделах вашего кода. В вашем случае вы можете просто переместить объявление элемента управления на уровень класса. Однако вам придется сделать его статическим, поскольку вы обращаетесь к нему из статического класса

public static class Met
{
    Static StockBox[] = null;
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer)
    {

        stockBox = new StockBox[Var.stockCount + 1];
        for (int i = 1; i <= Var.stockCount; i++)
        {
            stockBox[i] = new StockBox();
            stockBox[i].StockText = stock[i];
            boxContainer.Controls.Add(stockBox[i]);
        }

        return stockBox;
    }
} 
0 голосов
/ 22 октября 2010

Ваш stockBox в настоящее время является переменной n в CreateMap().stockBox будет удалено, когда метод закончится (из scope ).Поэтому вам нужно переместить stockbox на уровень класса следующим образом:

public static class Met
{
    static StockBox[] stockBox = null;
    public static StockBox[] CreateMap(string[] stock, TableLayoutPanel boxContainer)
    {
        stockBox = new StockBox[Var.stockCount + 1];

        for (int i = 1; i <= Var.stockCount; i++)
        {
            stockBox[i] = new StockBox();
            stockBox[i].StockText = stock[i];
            boxContainer.Controls.Add(stockBox[i]);
        }

        return stockBox;
    }

    public static AccessStockBox()
    {
        if (stockBox != null)
        {
            //you should be able to access stockbox here
        }
    }
}
0 голосов
/ 22 октября 2010

Убедитесь, что StockBox не находится внутри класса met, и он явно объявлен как public, если это так.Если StockBox внутри соблюдается и общедоступен, то получите к нему доступ, позвонив в Met.StockBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...