Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120

Не изменяется picturebox.image

02.09.2015, 12:41. Показов 1590. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Пишу для Windows CE 6.0 на C#
Вообще опыта разработки программ для Win платформ почти нету, но я очень много пишу на контроллеры, поэтому понимаю в целом что к чему происходит.
Программа не сложная, выглядит примерно следующим образом:
1. Есть картинки на форме, есть события клика на картинки - там они меняют свое изображение, это работает
2. Есть класс CAN шины - он создает событие. В нем я меняю флаги(data_new и newdata ниже) для изменения картинок. Тут все работает.
3. Есть таймер. При событии он смотрит флаг и если он true, то я изменяю picturebox.image на какое-то другое изображение. А вот тут не работает, точнее работает через раз. Я не могу понять что к чему. В дебаге все по инструкциям проходит ок, но в реале ничего не меняется.

Правильно ли я делаю? или есть какой-то другой способ такого рода изменений? Просто while(1) цикл я не могу написать как в контроллере -поэтому этот цикл у меня выполняет таймер. Сначала команды изменения были в CAN событии, но я подумал, что устройство может просто не успевать обрабатывать и переместил в отдельную функцию, а ее вызов в обработчик таймера, получилось примерно так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void tim_sec_Tick(object sender, EventArgs e)// TIMER
{
     if (data_new)
     {
           data_new = false;
            picture_home_Paint();
     } 
}
 
..............................
private void picture_home_Paint()
{
     if (newdata == 1) picture_home.Image = (System.Drawing.Image)Properties.Resources.ResourceManager.GetObject("home");
     else picture_home.Image = (System.Drawing.Image)Properties.Resources.ResourceManager.GetObject("home_def");
}
Заранее спасибо за помощь
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2015, 12:41
Ответы с готовыми решениями:

Клик по PictureBox: получение координат клика на PictureBox.Image
Собственно имею PictureBox, например размерами 500 на 500 и в нем есть картинка, например размерами 1000 на 1000, я ее масштабирую, что бы...

this.Controls + picturebox.Image
Добрый день, имеется такая проблема. this.Controls.Text = "dddd"; Работает превосходно а вот this.Controls.Image = new...

Внедрить Image (PictureBox) в Chart
Всем привет. Есть такой вообще неправильный набросок кода: private void Chart1_Click(object sender, EventArgs e) { ...

2
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
02.09.2015, 16:07
Цитата Сообщение от beam Посмотреть сообщение
устройство может просто не успевать обрабатывать и переместил в отдельную функцию
И каким образом это помогает устройству? Отдельная функция дольше работает, или как?
Цитата Сообщение от beam Посмотреть сообщение
Правильно ли я делаю?
Ну то, что у Вас с переменой-флагом data_new все нормально, это точно. А где переменная newdata меняется – Вы не показали. Ее и нужно проконтролировать...
0
3 / 4 / 4
Регистрация: 22.05.2015
Сообщений: 120
02.09.2015, 20:54  [ТС]
newdata и флаг меняются в функции, адрес которой передается в .dll либу самого устройства.
Спустя то время, после написания поста я изучил поверхностно делегаты и попробовал - в итоге я понял, что эта функция вызывается в другом потоке и что бы изменить 1 картинку мне нужно ее изменять аж через Invoke. Все бы ничего, да только объектов изменения у меня очень много. Есть ли какой-то способ через Invoke просто вызвать функцию основного потока что бы изменять объекты в нем? ибо писать инвок ф-ю под каждый объект дело занятное, а времени как всегда нет... Проект уже должен быть сделан пару дней назад, а воз и ныне там.
Извиняюсь если говорю глупости - шарпы изучаю как уже пару дней методом не работает - нужно сделать...

Добавлено через 2 часа 25 минут
Разобрался с делегатами и сделал простой функцией:

C#
1
2
3
4
5
6
7
8
9
10
11
public delegate void Pic_method_cont(System.Windows.Forms.PictureBox in_pic, string place);
 
public void pic_im(PictureBox in_pic, string place)
        {
            if (in_pic.InvokeRequired)
            {
                Pic_method_cont d = new Pic_method_cont(pic_im);
                in_pic.Invoke(d, new object[] { in_pic, place });
            }
            else in_pic.Image = (System.Drawing.Image)Properties.Resources.ResourceManager.GetObject(place);
        }
теперь функцию можно вызвать с другого потока и все будет ок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2015, 20:54
Помогаю со студенческими работами здесь

Конвертирование из PictureBox.Image в массив байт
Доброе утро ув. форумчане! Возникла необходимость такая: У меня есть изображение в PictureBox... Есть БД MS SQL, Все подключено и...

Получить Image из PictureBox если Visible==false
Нужно получить Image из PictureBox1 Если pictureBox1.Visible == false приложение будет считать что pictureBox1.Image == null и будет...

Загрузить изображение из Stream в Image или в PictureBox
через диалог выбрал файл записал в Stream как мне теперь закинуть его в пиктури бокс ? напишите кто нибудь решение)) спасибо ...

Можно ли организовать цикл treeNodes -> pictureBox?Image
Добрый день! Возникло желание немного упростить однообразный код, но из-за отсутствия опыта никак не получается. Имеется treeView, в...

PictureBox.Image.Save(GDI+ ошибка общего вида)
В case выкидывает ошибку, GDI+ ошибка общего вида. Делал напрямки из пикчи сохранить, результат тот же, пишут на форумах типа путь...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru