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

Для нестатического поля, метода или свойства "System.Windows.Forms.Control.Invoke(Sys­tem.Delegate)" требуется ссылка

18.07.2019, 15:33. Показов 6008. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите мне пожалуйста, где я накосячил/что я делаю не так
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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Reflection;
using System.Resources;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Threading;
 
namespace QLauncher___launcher_for_Minecraft
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        void PictureBox1Click(object sender, EventArgs e)
        {
    
        }
         void update()
        {
            /*мой код*/
 
                MainForm.Invoke(new Action(delegate() {MainForm.Hide();})); //2 ошибки с MainForm
                Form1 f = new Form1();
                f.Show();
                MessageBox.Show("!!!");
        }
        void MainFormLoad(object sender, EventArgs e)
        {
            ResourceManager resources = new ResourceManager("QLauncher___launcher_for_Minecraft.Resource1", Assembly.GetExecutingAssembly());
            Bitmap bitmap = (Bitmap)resources.GetObject("QL_gif");
            pictureBox1.Image = bitmap;
        }
        void MainFormShown(object sender, EventArgs e)
        {
            Thread upd = new Thread(update);
            upd.Start();
            //this.Hide();
                //Form1 f = new Form1();
                //f.Show();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2019, 15:33
Ответы с готовыми решениями:

Для нестатического поля метода или свойства Control.Size требуется ссылка на объект
public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs...

Ошибка: "Для нестатического поля метода или свойства Control.left требуется ссылка на объект"
Для нестатического поля метода или свойства Control.left требуется ссылка на объект using System; using System.Collections.Generic; ...

Ошибка Для нестатического поля, метода или свойства "Control.Height" требуется ссылка на объект
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using...

14
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 15:44
Зачем Вам делегат?

C#
1
2
3
4
5
6
7
8
9
10
 void update()
        {
            /*мой код*/
 
                //MainForm.Invoke(new Action(delegate() {MainForm.Hide();})); //2 ошибки с MainForm
                this.Hide();
                Form1 f = new Form1();
                f.Show();
                MessageBox.Show("!!!");
        }
Так скорет
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 15:51  [ТС]
Если я заменяю эту строчку на вашу, выпадает исключение: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'MainForm' не из того потока, в котором он был создан

Добавлено через 3 минуты
Вы спросите: зачем мне второй поток? А он мне нужен, чтобы воспроизводить gif анимацию без тормозов(в потоке update идет подключение к Mysql)
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 15:54
Лучший ответ Сообщение было отмечено Prosto_chelovek как решение

Решение

Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Если я заменяю эту строчку на вашу, выпадает исключение: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'MainForm' не из того потока, в котором он был создан
Я хз где Вы вызываете метод Update
В таком случае
C#
1
2
3
4
Invoke(new MethodInvoker(delegate
                    {
                        this.Hide();
                    }));
Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
 void update()
        {
            Invoke(new MethodInvoker(delegate
                    {
                        this.Hide();
                    }));
                Form1 f = new Form1();
                f.Show();
                MessageBox.Show("!!!");
        }
Добавлено через 1 минуту
P.S. и я может ничего не понимаю, но где в update подключение к MySQL?
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 16:00  [ТС]
Теперь обнаружилась еще одна проблема: форма f появляется, а после нажатия ок в messagebox'е пропадает
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 16:09
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Теперь обнаружилась еще одна проблема: форма f появляется, а после нажатия ок в messagebox'е пропадает
Потому что Вы скрываете форму родитель.

C#
1
2
3
4
5
6
7
8
9
10
void update()
        {
            Invoke(new MethodInvoker(delegate
                    {
                        this.Visible = false;
                    }));
                Form1 f = new Form1();
                f.Show();
                MessageBox.Show("!!!");
        }
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 16:11  [ТС]
Эффект тот же
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 16:13
Подмечу, чтобы было наоборот, когда закроете Form1 верните всё на круги своя
В событии FormClosing
C#
1
2
3
4
5
6
7
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
 
               MainForm mf = new MainForm ();
               mf.Visible = true;
               this.Close()
         }
Добавлено через 1 минуту
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Эффект тот же
То есть две формы просто скрылись?
Прикрепите ка проект
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 16:22  [ТС]
Нет, вы меня наверно не понимаете. Опишу, что должно происходить:
-Появление формы MainForm
-В ней в другом потоке выполнение MySql запроса(зачем второй поток - говорил)
-После того, как запрос выполнится, мы скрываем MainForm и пытаемся запустить форму Form1, но она почему-то закрывается сразу после нажатия ок в messagebox'е "!!!"

Добавлено через 2 минуты
Причем сразу с messagebox появляется как раз форма Form1
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 16:46
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
-Появление формы MainForm
-В ней в другом потоке выполнение MySql запроса(зачем второй поток - говорил)
-После того, как запрос выполнится, мы скрываем MainForm и пытаемся запустить форму Form1, но она почему-то закрывается сразу после нажатия ок в messagebox'е "!!!"
Так я как раз таки Вас прекрасно понимаю, просто на кусках кода не понятно почему так происходит.
Чтобы иметь полную картину хотя бы полный код под спойлер бросьте.
Потому что Вы продолжаете утверждать что метод update выполняет какой то запрос
C#
1
2
3
4
5
6
7
8
9
10
11
void update()
        {
            Invoke(new MethodInvoker(delegate
                    {
                        this.Visible = false; //Получаем доступ с другого потока
                    }));
                Form1 f = new Form1(); //новвый экз класса Форма1
                f.Show(); //Показываем форму1
                MessageBox.Show("!!!"); //Выводим MessageBox
//Где тут запрос к БД?
        }
Добавлено через 2 минуты
И новый поток можно вызвать в событии Load
C#
1
2
3
Thread upd = new Thread(update);
            upd.Start();
//только вот метод update зачем в новом потоке не пойму


Событие Load запускается, когда форма была инициализирована после создания дескриптора, но до его отображения.

Событие Shown срабатывает после первого появления формы, когда вы вызываете form.Show() (или form.Visible = true).
Если вы скроете свою форму, затем снова покажите ее, Shown снова запустится. (Но Load не будет)

Добавлено через 4 минуты
если Вы скрываете как выполняется запрос в БД, то внимательно посмотрите там.
Вот простой пример записи в БД. У Вас нечто похожее?
C#
1
2
string sqlComments = "INSERT INTO tasks_comment values(@inumber,@comments)";
ExecuteNonQuery(sqlComments, new MySqlParameter("@inumber", cbNumber.Text), new MySqlParameter("@comments", null));
Добавлено через 12 минут
Вы код Form1 то приложите?
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 17:21  [ТС]
Вообщем, где-нибудь попозже прикреплю проект
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
18.07.2019, 18:33  [ТС]
Вот исходники
Вложения
Тип файла: rar QLauncher - launcher for Minecraft.rar (1.04 Мб, 2 просмотров)
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 20:45
Лучший ответ Сообщение было отмечено Prosto_chelovek как решение

Решение

Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Вот исходники
Вот Вам рабочая версия.
Вложения
Тип файла: zip QLauncher - launcher for Minecraft.zip (1.84 Мб, 1 просмотров)
0
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
18.07.2019, 22:12
Вы бы хоть отписались. Работает или нет у Вас?
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 26
19.07.2019, 15:44  [ТС]
Спасибо большое за устранение ошибки!! Правда, мне пришлось еще немного подправить код, т.к. я хотел чтобы запрос mysql происходил, когда появляется первая форма(т.е. MainForm), а не Form1. Еще раз большое спасибо!!

Добавлено через 53 секунды
P.S. вы думали что я еще не спал в 10 часов ночи?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2019, 15:44
Помогаю со студенческими работами здесь

Для нестатического поля, метода или свойства требуется ссылка на объект
Здравствуйте! Не могу разобраться с ошибкой. Нужно добавить в конец public richtextbox, который находится в Form1 (у меня это outputwindow)...

Для нестатического поля, метода или свойства требуется ссылка на объект
Помогите пожалуйста решить ошибки

Для нестатического поля, метода или свойства требуется ссылка на объект
Замучился уже. Кто может помочь? Есть 2 datagrid заполняемых динамически (по регистрации карточек в микрофонах) Нужно то всего лишь...

Для нестатического поля, метода или свойства требуется ссылка на объект
Создал 2 класса. Один из которых содержит список из элементов другого класса. В основной форме сделал текстбоксы из которых берется...

Для нестатического поля, метода или свойства Form1.izmenit." требуется ссылка на объект
Добрый день. Помогите пожалуйста исправить ошибку. С одной формы, нужно на другой включить видимость элемента. Ругается что: "Для...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru