Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 13.08.2015
Сообщений: 44
1

Где и как создать массив объектов, чтобы можно было получить доступ к методам этих объектов?

22.06.2017, 11:38. Показов 2219. Ответов 6

Задача: "в win form кликаю на кнопку (button) и в этот момент в одном из массивов экземпляров класса должен вызваться метод"
Проблема в том, что я не знаю где создать этот массив т.к. он везде локальный
Код в win form
C#
1
2
3
4
private void button1_Click(object sender, EventArgs e)
{
     Agents[0].plus(); // "Agents не существует в данном контексте"
}
Код в main
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    static class Program
    {
        [STAThread] 
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
 
            Ag[] Agents = new Ag[100];
            Agents[0] = new Ag(); 
        }
 
    }
    public class Ag
    {
        private int var;
        public void plus()
        {
            var++;
        }
    }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2017, 11:38
Ответы с готовыми решениями:

Меню: выпадающее дерево, как можно сделать чтобы при кол-во объектов ~1000 не было тормозов ?
как можно сделать чтобы при кол-во объектов ~1000 не было тормозов

В общем как заменить в подборе объектов и так чтобы не сохранял в массив объектов а в лист? с#
Вот код.public static RaycastHit rch; int _my_podbor_switch; public GameObject...

Массив объектов внутри объекта. Как получить доступ к элементу?
Привет. Есть класс для матриц template <typename X> class массив { protected: int...

Как создать список объектов класса и обращаться к их методам?
Для решения одной задачи мне нужно создать список объектов класса, но я не знаю, как это правильно...

6
906 / 791 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.06.2017, 12:13 2
Объявите переменную вне метода Main
1
1 / 1 / 1
Регистрация: 13.08.2015
Сообщений: 44
22.06.2017, 13:27  [ТС] 3
Вне main это в статическом классе program, как объявить массив объектов в статическом классе?
0
Модератор
Эксперт .NET
5737 / 4635 / 2919
Регистрация: 20.04.2015
Сообщений: 8,274
22.06.2017, 13:52 4
Цитата Сообщение от babanty Посмотреть сообщение
как объявить массив объектов в статическом классе?
Объявляйте массив там, где будете с ним работать. Но не в методе, а как поле класса:
C#
1
2
3
4
5
6
7
8
9
10
class Form1 : Form
{
    Ag[] Agents = new Ag[100];
    //...
    private void button1_Click(object sender, EventArgs e)
    {
        Agents[0].plus(); // "Agents существует в данном контексте"
    }
    //...
}
1
906 / 791 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.06.2017, 13:57 5
Лучший ответ Сообщение было отмечено babanty как решение

Решение

во-первых:
C#
1
2
3
4
5
6
7
8
public class Ag
    {
        private int var;
        public void plus()
        {
            var++;
        }
    }
это желательно вынести в отдельный класс, негоже в программном файле создавать левые классы
во-вторых:
чтобы вашу переменную было видно, вы должны её определить как глобальную и при 1ом вызове вашей программы инициализировать её.
C#
1
public static Ag[] Agents = new Ag[100];
и тогда обращение к этому полю будет по такому принципу:
C#
1
<Имя класса в котором объявлена переменная>.Agents[0] = new Ag();
1
1 / 1 / 1
Регистрация: 13.08.2015
Сообщений: 44
22.06.2017, 14:34  [ТС] 6
Проблема в том, что с этим массивом объектов работает не только вин формс, объявить его в class Form1 : Form обозначает отрезать доступ остальным объектам работающим с ним.
Если я делаю так, то у него такая проблема (см. коммент)
C#
1
2
3
4
5
6
7
8
9
10
11
12
    static class Program
    {
            Ag[] Agents = new Ag[100]; //  Тут все норм
            Agents[0] = new Ag(); // Тут беда, все в красном
 
        [STAThread] 
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
А если так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    static class Program
    {
            Ag[] Agents = new Ag[100]; //  Тут все норм
            
 
        [STAThread] 
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
 
            Agents[0] = new Ag();
        }
То в коде win form пишет исключение:
C#
1
2
3
4
5
6
        private void button1_Click(object sender, EventArgs e)
        {
            Program.Agents[0].plus(); //Необработанное исключение типа "System.NullReferenceException" в 13.06.2017.exe
                                                   //Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
            MessageBox.Show(Program.Agents[0].var.ToString());
        }
0
906 / 791 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.06.2017, 14:48 7
Цитата Сообщение от babanty Посмотреть сообщение
То в коде win form пишет исключение:
Потому что массив свой нужно проинициализировать ДО запуска формы:
C#
1
2
Agents[0] = new Ag();
Application.Run(new Form1());
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2017, 14:48

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как можно создать динамический массив объектов fstream?
есть вариант,но не работает. подскажите как правильно сделать char buf; cin&gt;&gt;n; fstream...

Как можно еще создать массив объектов класса
допустим у меня есть основной класс и куча классов что наследуют его. помню видео в котором...

Вывести палитру на форму так, чтобы можно было менять цвет объектов, нарисованных в PictureBox
Итак, товарищи! Подскажите пожалуйста как вывести палитру на форму так, чтобы можно было менять...

Как можно создать массив разных объектов, заранее неизвестного размера?
если нужно создать несколько однотипных объектов программно то один скажем, создается кодом myobj:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.