Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
19 / 19 / 16
Регистрация: 13.10.2013
Сообщений: 205
.NET 4.x

В экземпляре объекта не задана ссылка на объект

29.04.2016, 17:43. Показов 5965. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, столкнулся с проблемой что в форме WelcomeForm не видит переменную my_version из формы FormUpdater (привожу скрины) переменная public по сути должна быть видна везде.

Код FormUpdator
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
 
namespace SocketCoder
{
    public partial class FormUpdater : Form
    {
        public static string my_version = "3.0";//Локальная версия программы. Изменять с каждым новым релизом. 
 
        // Ссылки для скачивания
        private string url_version = "http://hwid.esy.es/ChatServer/version.txt";
        private string url_program = "https://hwid.asuscomm.com/AICLOUD949831261/Text_Chat_Room.exe";//ссылка на программу, новой версии
        private string url_foruser = "https://yadi.sk/d/cVG03-d6rPNKW";//ссылка на программу, новой версии скачивание вручную!
 
        private string my_filename;
        private string up_filename;
 
        // Признак, что началось скачивание обновления, требуется ожидание завершения процесса
        private bool is_download; public bool download() { return is_download; }
 
        // Признак, что обновление не требуется или закончено, можно запускать программу.
        private bool is_skipped; public bool skipped() { return is_skipped; }
 
        public FormUpdater()
        {
            my_filename = get_exec_filename(); // имя запущенной программы
            up_filename = "new." + my_filename; // имя временного файла для новой версии
 
            string[] keys = Environment.GetCommandLineArgs();
 
            if (keys.Length < 3)
                do_check_update();
            else
            {
                if (keys[1].ToLower() == "/u")
                    do_copy_downloaded_program(keys[2]);
 
                if (keys[1].ToLower() == "/d")
                    do_delete_old_program(keys[2]);
            }
        }
 
        public void do_check_update()
        {
            string new_version = get_server_version(); // Получаем номер последней версии
 
            if (my_version == new_version) // Если обновление не нужно
            {
                is_download = false;
                is_skipped = true; // Пропускаем модуль обновления
            }
            else
                do_download_update(); // Запускаем скачивание новой версии
        }
 
        private void do_download_update()
        {
            //InitializeComponent();
            label_status.Text = "Скачивается файл: " + url_program;
            download_file();
            is_download = true; // Будем ждать завершения процесса
            is_skipped = false; // Основную форму не нужно запускать
        }
 
        private void download_file()
        {
            try
            {
                WebClient webClient = new WebClient();
                webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                webClient.DownloadFileAsync(new Uri(url_program), up_filename);
            }
            catch (Exception ex)
            {
                error(ex.Message + " " + up_filename);
            }
        }
 
        private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progress_download.Value = e.ProgressPercentage;
        }
 
        private void Completed(object sender, AsyncCompletedEventArgs e)
        {
            // Запускаем второй этап обновления
            run_program(up_filename, "/u "" + my_filename + """);
            this.Close();
        }
 
        private void run_program(string filename, string keys)
        {
            try
            {
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.WorkingDirectory = Application.StartupPath;
                proc.StartInfo.FileName = filename;
                proc.StartInfo.Arguments = keys; // Аргументы командной строки
                proc.Start(); // Запускаем!
            }
            catch (Exception ex)
            {
                error(ex.Message + " " + filename);
            }
        }
 
        void do_copy_downloaded_program(string filename)
        {
            try_to_delete_file(filename);
            try
            {
                File.Copy(my_filename, filename);
                // Запускаем последний этап обновления
                run_program(filename, "/d "" + my_filename + """);
                is_download = false;
                is_skipped = false;
            }
            catch (Exception ex)
            {
                error(ex.Message + " " + filename);
            }
        }
 
        void do_delete_old_program(string filename)
        {
            try_to_delete_file(filename);
            is_download = false;
            is_skipped = true;
        }
 
        private void try_to_delete_file(string filename)
        {
            int loop = 10;
            while (--loop > 0 && File.Exists(filename))
                try
                {
                    File.Delete(filename);
                }
                catch
                {
                    Thread.Sleep(200);
                }
        }
 
        private string get_server_version()
        {
            try
            {
                WebClient webClient = new WebClient();
                return webClient.DownloadString(url_version).Trim();
            }
            catch
            {
                // Если номер версии не можем получить, 
                // то программу даже и не надо пытаться.
                return my_version;
            }
        }
 
        private void error(string message)
        {
            if (DialogResult.Yes == MessageBox.Show(
                "Ошибка обновления: " + message +
                    "\n\nСкачать программу вручную?",
                    "Ошибка", MessageBoxButtons.YesNo))
                OpenLink(url_foruser);
            is_download = false;
            is_skipped = false; // в случае ошибки ничего не запускаем
        }
 
        private void OpenLink(string sUrl)
        {
            try
            {
                System.Diagnostics.Process.Start(sUrl);
            }
            catch (Exception exc1)
            {
                if (exc1.GetType().ToString() != "System.ComponentModel.Win32Exception")
                    try
                    {
                        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("IExplore.exe", sUrl);
                        System.Diagnostics.Process.Start(startInfo);
                        startInfo = null;
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Запустить обозреватель, к сожалению, не удалось.\n\nОткройте страницу ручным способом:\n" + sUrl, "ОШИБКА");
                    }
            }
        }
 
        private string get_exec_filename()
        {
            string fullname = Application.ExecutablePath;
            string[] split = { "" };
            string[] parts = fullname.Split(split, StringSplitOptions.None);
            if (parts.Length > 0)
                return parts[parts.Length - 1];
            return "";
        }
    }
}
Код WelcomeForm
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
using System;
using System.Windows.Forms;
 
namespace SocketCoder
{
    public partial class WelcomeForm : Form
    {
        public WelcomeForm()
        {
            //Получаем версию ПО
            lbUpdate.Text = "Версия " + FormUpdater.my_version; //аргумент my_version не доступен из класса FormUpdater, хотя там котируется как public 
            InitializeComponent();
        }
 
        private void checkClient_CheckedChanged(object sender, EventArgs e)
        {
            Hide();//скрываем наше окно
            ChatClient my = new ChatClient();
            my.Show();
        }
 
        private void checkServer_CheckedChanged(object sender, EventArgs e)
        {
            Hide();//скрываем наше окно
            ChatServer my = new ChatServer();
            my.Show();
        }
    }
}
Срочно прошу помочь, завтра уже сдавать.
Миниатюры
В экземпляре объекта не задана ссылка на объект   В экземпляре объекта не задана ссылка на объект  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2016, 17:43
Ответы с готовыми решениями:

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

В экземпляре объекта не задана ссылка на объект
Выделенный код отмечает ошибкой (В экземпляре объекта не задана ссылка на объект.) namespace WindowsFormsApplication1 { class...

В экземпляре объекта не задана ссылка на объект
private void button2_Click(object sender, EventArgs e) { object oMissing = System.Reflection.Missing.Value; ...

3
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
29.04.2016, 17:48
Лучший ответ Сообщение было отмечено Joker456 как решение

Решение

У вас проблема совершенно не в этом. А именно lbUpdate == null, т.к. Label еще не создан (он создается в методе InitializeComponent).

Поменяйте местами строки
C#
1
2
lbUpdate.Text = "Версия " + FormUpdater.my_version; //аргумент my_version не доступен из класса FormUpdater, хотя там котируется как public 
InitializeComponent();
и все заработает.
1
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
29.04.2016, 17:50
Лучший ответ Сообщение было отмечено Joker456 как решение

Решение

Это у вас lbUpdate равно null пока не вызван InitializeComponent(), поменяйте местами строки
C#
1
2
3
4
5
6
7
public WelcomeForm()
        {
            InitializeComponent();
            //Получаем версию ПО
            lbUpdate.Text = "Версия " + FormUpdater.my_version; //аргумент my_version не доступен из класса FormUpdater, хотя там котируется как public 
 
        }
1
19 / 19 / 16
Регистрация: 13.10.2013
Сообщений: 205
29.04.2016, 18:14  [ТС]
Действительно. Даже как-то не о чем получилось (
Миниатюры
В экземпляре объекта не задана ссылка на объект   В экземпляре объекта не задана ссылка на объект  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2016, 18:14
Помогаю со студенческими работами здесь

В экземпляре объекта не задана ссылка на объект
Помогите разобраться пжлст string worker; public string Workers() { string str = { &quot;;&quot; }; ...

В экземпляре объекта не задана ссылка на объект
Делаю массив из Label Label labels = new Label; Далее задаю настройки for (int i = 0; i &lt; 10; i++) ...

В экземпляре объекта не задана ссылка на объект
При открытии формы динамически создаются контролы webBrowser, с некоторым текстом. При нажатии на кнопку необходимо из всех webBrowser...

В экземпляре объекта не задана ссылка на объект при динамическом создании объекта
Выдается ошибка NullReferenceException в private void button2_Click(object sender, EventArgs e) { ...

Обновление приложения: В экземпляре объекта не задана ссылка на объект
Пишу апдейтер для одной программы(может немножко по-наркомански :D). Он получает с интернета список с обновлениями вида: version\n link (то...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru