С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/496: Рейтинг темы: голосов - 496, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
1

Ссылка на объект не указывает на экземпляр объекта

10.02.2016, 14:15. Показов 91772. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Все объявил, каждой переменной и каждому методу присвоил значения. Однако выходит эта ошибка.
Задача программы такая. После нажатия на кнопку "Открыть", пользователь должен выбрать файл со списком студентов и их оценками. После загрузки данные считываются и посылаются в структуру, на дальнейшую обработку.
Также должна быть возможность в ComboBox выбрать нужный вариант. (в моем случае снова показать список из файла который уже был открыт !!!) Все сделал, после открытия список показывается, но после выбора нужного варианта в ComboBox, выходит эта ошибка. Код прилагается.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e) {
            OpenFile();
        }
        private struct ShowStudList {
            public string file;
 
            public ShowStudList(string file)
            {
                this.file = file;
            }
 
            public string[] Operations(int x)
            {
                string[] Sort = file.Split('\r');
                Array.Sort(Sort);
                for (int a = 0; a < Sort.Length; a++)
                    Sort[a] = Sort[a].Trim();
                if (x == 1)
                {
                    string showlvi = "";
                    for (int a = 0; a < Sort.Length; a++)
                        showlvi += Sort[a] + "\r";
 
                    string[] showlvi1 = showlvi.Split('.');
                    return showlvi1;
                }
                else if (x == 2)
                {
                    string DebptStud = "";
                    string[] studlist;
                    for (int i = 0; i < Sort.Length; i++)
                    {
                        if (Sort[0].Contains("2") | Sort[0].Contains(" н.") | Sort[0].Contains(".н ") | Sort[0].Contains(" н "))
                            DebptStud += Sort[0];
                        studlist = DebptStud.Split('.');
                        return studlist;
                    }
                }
                return Sort;
            }
        }
        private void OpenFile() {
 
            StudList.Items.Clear();
            int x = 0, y = 1, z = 2;
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "Текстовые файлы|*.txt";
            ShowStudList data = new ShowStudList();
            if (dialog.ShowDialog() == DialogResult.OK) {
                string file = File.ReadAllText(dialog.FileName);
                data.file = file;
                string[] showlvi1 = data.Operations(1);
 
                for (int i = 0; i < (showlvi1.Length / 3); i++)
                {
                    ListViewItem ivi = new ListViewItem(showlvi1[x]);
                    ivi.SubItems.Add(showlvi1[y]);
                    ivi.SubItems.Add(showlvi1[z]);
                    StudList.Items.Add(ivi);
                    x += 3;
                    y += 3;
                    z += 3;
                }
            }
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
            try {
 
                if (comboBox1.SelectedIndex == 0) {
                    StudList.Items.Clear();
                    int x = 0, y = 1, z = 2;
                    ShowStudList data = new ShowStudList();
                    string[] showlvi2 = data.Operations(1);
                    for (int i = 0; i < (showlvi2.Length / 3); i++) {
 
                        ListViewItem ivi = new ListViewItem(showlvi2[x]);
                        ivi.SubItems.Add(showlvi2[y]);
                        ivi.SubItems.Add(showlvi2[z]);
                        StudList.Items.Add(ivi);
                        x += 3;
                        y += 3;
                        z += 3;
                    }
                }
            }
            catch {
                MessageBox.Show("Не найдет файл!");
            }
        }
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2016, 14:15
Ответы с готовыми решениями:

Ссылка на объект не указывает на экземпляр объекта
Ругается на красную строчку помогите. private void button4_Click_1(object sender, EventArgs e)...

Ссылка на объект не указывает на экземпляр объекта
Только учусь сильно не ругайте. Есть код все работает при нажатии кнопки btnAddDriver выскакивает...

Ссылка на объект не указывает на экземпляр объекта
Доброго времени суток, форумчане! Перешёл на VS 2017, раньше работал в VS 2015. Создал новый...

Ссылка на объект не указывает на экземпляр объекта
строка где появляется ошибка dbDataSet.Licenz.FindByIdLic(id).Delete(); Остальной код класса ...

16
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
10.02.2016, 14:19 2
CobrDOBR, какая переменная не указывает на объект?
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 15:15  [ТС] 3
@Kerry_Jr, Он ссылается на
C#
1
string[] Sort = file.Split('\r');
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:23 4
Есть поле класса:
C#
12
public string file;
Здесь объявляется и инициализируется переменная метода:
C#
57
string file = File.ReadAllText(dialog.FileName);
А в поле класса file ссылка остается равной null.
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 15:37  [ТС] 5
Даценд, как она может оставаться null, если я инициализировал в конструкторе?
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:39 6
Лучший ответ Сообщение было отмечено CobrDOBR как решение

Решение

CobrDOBR,
Недочитал. В 57-й все правильно, там следующей строкой ссылка передается.
А вот здесь:
C#
80
81
ShowStudList data = new ShowStudList();
string[] showlvi2 = data.Operations(1);
Созается новая структура. И следующей строкой вызывается data.Operations(1). А поле file этой новой структуры пока null.
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 15:45  [ТС] 7
Все, я понял тебя.
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:51 8
Лучший ответ Сообщение было отмечено CobrDOBR как решение

Решение

CobrDOBR,
Это совсем другой экземпляр структуры, для которого файл еще не открывался.
Чтобы работать с одной и той же структурой ее нужно сделать полем класса, а строку
C#
80
ShowStudList data = new ShowStudList();
убрать.
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 15:52  [ТС] 9
"сделать полем класса", как?

Не серчай если что, учусь)
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 16:00 10
Лучший ответ Сообщение было отмечено CobrDOBR как решение

Решение

На 7-й строке объявляете поле:
C#
1
ShowStudList data;
строка 55:
C#
55
data = new ShowStudList();
А строку 80 уберите.
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 16:09  [ТС] 11
Не помогло. Все поставил и убрал. Та же ошибка и на то же место. :/

Добавлено через 2 минуты
Файл открылся, список вывел, как только пытаюсь нажать пункт на Combobox, выходит эта ошибка.
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 16:30 12
CobrDOBR,
покажите код
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 17:22  [ТС] 13
Спасибо вам большое! Все наконец заработало.

Единственное.

C#
1
ShowStudList data;
Как объяснить вот эти 2 строчки? Что они вообще делают? Или хотя бы дайте направление, пойду самостоятельно гуглить. Буду безмерно благодарен.

C#
1
data = new ShowStudList();
То есть, почему мы пишем именно data = new ShowStudList(); ? Здесь мы просто обращаемся уже к созданному конструктору?
И что делает ShowStudList data;

Добавлено через 7 минут
Если не сложно, просто подсказать в чем проблема или где искать.

Сама ошибка пропала, за что отдельное спасибо. Однако в списке ошибок мне выходит "Обнаружен недостижимый код" и ссылается на
C#
1
for (int i = 0; i < Sort.Length; i++)
Это 38 строка
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 17:37 14
Лучший ответ Сообщение было отмечено CobrDOBR как решение

Решение

Здесь объявляем поле класса формы:
C#
1
ShowStudList data;
Поле класса может напрямую использоваться в любых нестатических методах или свойствах. Т.е. создаем что-то по назначению напоминающее глобальную переменную.
Если в каком-либо методе объявим
C#
1
ShowStudList data = new ShowStudList();
то это будет совсем другая data.
Поэтому, чтобы использовать ту, общую data в методе инициализируем ее так:
C#
1
data = new ShowStudList();
Добавлено через 5 минут
Цитата Сообщение от CobrDOBR Посмотреть сообщение
Однако в списке ошибок мне выходит "Обнаружен недостижимый код"
нигде не передается ничего, кроме 1 в Operations(int x)
3
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 17:49  [ТС] 15
Вот код всей структуры.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
private struct ShowStudList {
            public string file;
 
            public ShowStudList(string file)
            {
                this.file = file;
            }
 
            public string[] Operations(int x)
            {
                string[] Sort = file.Split('\r');
                Array.Sort(Sort);
                for (int a = 0; a < Sort.Length; a++)
                    Sort[a] = Sort[a].Trim();
                if (x == 1)
                {
                    string showlvi = "";
                    for (int a = 0; a < Sort.Length; a++)
                        showlvi += Sort[a] + "\r";
 
                    string[] showlvi1 = showlvi.Split('.');
                    return showlvi1;
                }
                else if (x == 2)
                {
                    string DebptStud = "";
                    string[] studlist;
                    for (int i = 0; i < Sort.Length; i++)
                    {
                        if (Sort[i].Contains("2") | Sort[i].Contains(" н.") | Sort[i].Contains(".н ") | Sort[i].Contains(" н "))
                            DebptStud += Sort[i];
                        studlist = DebptStud.Split('.');
                        return studlist;
                    }
                }
                return Sort;
            }
        }
Вот в этом методе передается не только 1.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
            try {
 
                if (comboBox1.SelectedIndex == 0) {
                    StudList.Items.Clear();
                    int x = 0, y = 1, z = 2;
                    string[] showlvi2 = data.Operations(1);
                    for (int i = 0; i < (showlvi2.Length / 3); i++) {
                        ListViewItem ivi = new ListViewItem(showlvi2[x]);
                        ivi.SubItems.Add(showlvi2[y]);
                        ivi.SubItems.Add(showlvi2[z]);
                        StudList.Items.Add(ivi);
                        x += 3;
                        y += 3;
                        z += 3;
                    }
                }
                if (comboBox1.SelectedIndex == 1)
                {
                    StudList.Items.Clear();
                    int x = 0, y = 1, z = 2;
                    string[] showlvi2 = data.Operations(2);
                    for (int i = 0; i < (showlvi2.Length / 3); i++)
                    {
                        ListViewItem ivi = new ListViewItem(showlvi2[x]);
                        ivi.SubItems.Add(showlvi2[y]);
                        ivi.SubItems.Add(showlvi2[z]);
                        StudList.Items.Add(ivi);
                        x += 3;
                        y += 3;
                        z += 3;
                    }
                }
            }
            catch {
                MessageBox.Show("Не найдет файл!");
            }
        }
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 19:15 16
CobrDOBR,
вот здесь:
C#
1
2
3
4
5
6
7
for (int i = 0; i < Sort.Length; i++)
{
    if (Sort[i].Contains("2") | Sort[i].Contains(" н.") | Sort[i].Contains(".н ") | Sort[i].Contains(" н "))
        DebptStud += Sort[i];
    studlist = DebptStud.Split('.');
    return studlist;
}
В конце первой же итерации return studlist делает выход из метода Operations. Второй итерации цикла не будет никогда. Поэтому код недостижимый.
2
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 21:20  [ТС] 17
Чувствую себя идиотом. Спасибо большое тебе!
1
10.02.2016, 21:20
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2016, 21:20
Помогаю со студенческими работами здесь

Ссылка на объект не указывает на экземпляр объекта
Нужно было сделать анимацию произвольного движения окружностей namespace...

Ссылка на объект не указывает на экземпляр объекта
я совсем недавно начал программировать, пишу проектную работу. Все пишется как по маслу но...

Ссылка на объект не указывает на экземпляр объекта
Не могу записать данные из dataGridView пишет &quot;Ссылка на объект не указывает на экземпляр объекта.&quot;...

Ссылка на объект не указывает на экземпляр объекта
Не могу понять, почему именно я славлваю NullReferenceException.. Ругается на эту строчку(25-я в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru