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

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

10.02.2016, 14:15. Показов 92092. Ответов 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) { 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
Ответ Создать тему
Новые блоги и статьи
Создаем Telegram бот на TypeScript с grammY
run.dev 05.04.2025
Одна из его самых сильных сторон Telegram — это интеграция ботов прямо в экосистему приложения. В отличие от многих других платформ, он предоставляет разработчикам мощный API, позволяющий создавать. . .
Паттерны распределённых транзакций в Event-Driven микросервисах
ArchitectMsa 05.04.2025
Современные программные системы всё чаще проектируются как совокупность взаимодействующих микросервисов. И хотя такой подход даёт множество преимуществ — масштабируемость, гибкость, устойчивость к. . .
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер