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

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

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

Студворк — интернет-сервис помощи студентам
Все объявил, каждой переменной и каждому методу присвоил значения. Однако выходит эта ошибка.
Задача программы такая. После нажатия на кнопку "Открыть", пользователь должен выбрать файл со списком студентов и их оценками. После загрузки данные считываются и посылаются в структуру, на дальнейшую обработку.
Также должна быть возможность в 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) { int columns =...

Ссылка на объект не указывает на экземпляр объекта
Только учусь сильно не ругайте. Есть код все работает при нажатии кнопки btnAddDriver выскакивает ошибка + $exception {&quot;Ссылка на...

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

16
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
10.02.2016, 14:19
CobrDOBR, какая переменная не указывает на объект?
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 15
10.02.2016, 15:15  [ТС]
@Kerry_Jr, Он ссылается на
C#
1
string[] Sort = file.Split('\r');
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:23
Есть поле класса:
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  [ТС]
Даценд, как она может оставаться null, если я инициализировал в конструкторе?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:39
Лучший ответ Сообщение было отмечено 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  [ТС]
Все, я понял тебя.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 15:51
Лучший ответ Сообщение было отмечено CobrDOBR как решение

Решение

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

Не серчай если что, учусь)
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 16:00
Лучший ответ Сообщение было отмечено 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  [ТС]
Не помогло. Все поставил и убрал. Та же ошибка и на то же место. :/

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

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

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
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 17:37
Лучший ответ Сообщение было отмечено 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  [ТС]
Вот код всей структуры.
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
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.02.2016, 19:15
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  [ТС]
Чувствую себя идиотом. Спасибо большое тебе!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2016, 21:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru