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

Как во время отладки просматривать изменения (отрисовка картинки) на PictureBox

05.01.2013, 18:18. Показов 2539. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, подскажите пож., я в цикле отрисовываю картинку на PictureBOx ну и хочу проверить как это делается, только вот во время отладки форма "зависает" , изменения не происходят, но сама функция отрисовки точно выполняется
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2013, 18:18
Ответы с готовыми решениями:

Загрузка progressBar во время загрузки картинки в pictureBox из пути
Здравствуйте. :read: Можно сделать так, чтобы progressBar появлялся на экране и не зависал, после того, как мы нажали на кнопку, у...

Как узнать были изменения в БД. Или дата время последнего изменения
Как узнать были изменения в БД. Или дата время последнего изменения. InnoDB INSERT UPDATE DELETE

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

22
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
05.01.2013, 18:30
Ну да, при сворачивании окна и разворачивании его снова происходит перерисовка содержимого, т.е. вызывается тот код, который вы пытаетесь отлаживать. Так что "увидеть", как он работает по частям не выйдет.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 19:08  [ТС]
блин, а у меня программа когда работает, "не отвечает" я не могу свернуть её, или для формы можно что-то сделать, чтобы окно сворачивалось и наоборот во время работы?
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
05.01.2013, 19:46
Вы не можете отлаживать программу и видеть ее в одно и то же время.
С другой стороны, проблему можно решить каким-то другим способов. Опишите проблему (зачем вам понадобилось отлаживать прорисовку) и мы подскажем вам что-нить.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 20:02  [ТС]
я делаю игру Пятнашки, комп должен сам решать, я написал алгоритм и думал в конце просто отрисовать и узнать решил ли комп головоломку, только вот программа очень долго выполняется - поставил ProgressBar , понял что прога не зависла а все еще решает, понятно что дело в коде - не оптимальный(мало опыта и логика не супер), и подумал если буду каждый шаг отрисовывать, то будет яснее. Алгоритм отлаживал, но до конечного решения не дошел - это слишком долго, по-моему код написан правильно и неграмотно.
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
05.01.2013, 20:20
1)Делаешь окно студии маленьким, таким что бы форма была видна при компиляции.
2)В нужной части кода ставишь "Выполнить до текущей позиции".
3)Компиляция
4)Фокус студии + F10
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 21:16  [ТС]
сделал, не получается (
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
05.01.2013, 21:24
Что именно?
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 21:33  [ТС]
никаких изменений на форме не произошло, может быть у меня что то не так:в цикле должны разные картинки рисовать, но не рисуются, пробую через отладку, все как надо: в функцию отрисовки заходит , нужные линии по идее должен рисовать-операторы выполняются
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
05.01.2013, 21:50
кинь код где рисуешь
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 22:13  [ТС]
вызов функции рисования здесь (метод drawField):
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
private int[,] collecting(int[,] ar)
        {
 
            if (this.finish(ar))
                return ar;
            else
            {
                F = G + H_func(ar);
             
                put(ar, F);
                G_put(ar, G);
                ar = get();
                G = check_G(ar);
                do
                {
                    ar = search(ar);
                    progressBar1.Value++;
                    if (finish(ar))
                        return ar;
 
                    for (int i = 0; i < nw; i++)                    
                        for (int j = 0; j < nh; j++)                        
                            if (ar[i, j] == 0)
                            {
                                ex = i;
                                ey = j;
                            }
                    drawField(ar);//рисует
                    //System.Threading.Thread.Sleep(3000);
                    G = check_G(ar);
                }
                while (!finish(ar));
 
                return ar;
            }
        }
в функции выше вызвается вот эта:
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 int[,] search(int [,]mas)
        {
            int zX = ex, zY = ey;
            int a, b;
            CLOSED.Add(mas);
            
            // ex ey koord 0
            for (int i = 0; i < nw; i++)
            {
                for (int j = 0; j < nh; j++)
                {
                    if (   ( (Math.Abs(i - ex) == 1) && (j - ey == 0) ) || ( (Math.Abs(j - ey) == 1) && (i - ex == 0) )  ) 
                    {
                        
                        int[,] array = new int[nw, nh];
                        a = ex; b = ey;
                        Array.Copy(mas, array, nw * nh);
                        array = move(i, j, array); //сначала i потом j
                        if (checkClosed(array))
                        {
                            ex = a; ey = b;
                            array = null;
                            continue;
                        }
 
                        G++;
                        F = G + H_func(array);
                        put(array, F);
                        G_put(array, G);
                        ex = zX;
                        ey = zY;
                        array = null;
                        G--;
                    }
                }
            }
            return get();
        }
а вот само рисование:
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
public void drawField(int[,] mas)
        {           
            pictureBox1.Image = bmp_for_draw;
            Graphics g = Graphics.FromImage(pictureBox1.Image);
 
            for (int i = 0; i < nw; i++)   // nw = nh = 4
            {
                for (int j = 0; j < nh; j++)
                {                    
                    if (mas[i, j] != 0)
                    {
                        g.DrawImage(koza,
                                    new Rectangle(j * cw, i * ch, cw, ch),
                                    new Rectangle(
                                                 ((mas[i, j] - 1) % nw) * cw,
                                                 ((mas[i, j] - 1) / nw) * ch,
                                                 cw, ch),
                                                 GraphicsUnit.Pixel);
                    }
                    else 
                    {
                        g.FillRectangle(SystemBrushes.Control, j * cw, i * ch, cw, ch);
                    }
 
                    g.DrawString(Convert.ToString(field[i, j]), new Font("Tahoma", 14, FontStyle.Bold), Brushes.Black, j * cw + 65, i * ch + 55);
                    g.DrawRectangle(Pens.Black, j * cw, i * ch, cw, ch);
                                       
                }
            }
 
        }// Отрисовка картинки
Добавлено через 7 минут
разобраться конечно не просто, но уже даже и не знаю в чем может быть дело, во время отладки все операторы функции отрисовки выполняются и по идее должно бы рисоваться при обычном запуске, но ничего не происходит, progressbar при этом заполняется, само приложение "не отвечает"
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
05.01.2013, 22:22
Попробуй еще так : "Выполнить до текущей позиции"(выбери строку где рисуется 100%) -> и понажимай Ctrl+F10.
Например тут :
C#
1
g.DrawRectangle(Pens.Black, j * cw, i * ch, cw, ch);
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
05.01.2013, 22:25  [ТС]
не получается, если пробую по нажатию другой кнопки единожды вызвать функцию drawField() то все отлично рисуется, а тут не получается и главное функция то выполняется, а на форме изменений никаких (
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.01.2013, 01:03
Когда я отлаживал свою игру (змейку), у меня пошагово прекрасно рисовалась картинка (метод был а-ля)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public class GameEventArgs : EventArgs
        //Делаем класс Game максимально закрытым. Для этого все параметры наружу передаем в виде EventArgs только для чтения
        {
            public string Score { get; private set; }
            public Image Map { get; private set; }
 
            public GameEventArgs(string score, Image image)
            {
                Score = score;
                Map = image;
            }
        }
...
        private void RefreshForm(object sender, Game.GameEventArgs e)
        {
            label1.Text = e.Score;
            picturebox.Image = e.Map;
        }
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
06.01.2013, 10:56  [ТС]
странно, а в чем же у меня дело, покопаюсь отпишусь
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
06.01.2013, 14:14
Единственное, что можно, - это рисовать в Bitmap и сохранять его в файл. Метод некрасивый, но работает.
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
06.01.2013, 14:31  [ТС]
в принципе можно, но у меня тогда картинок получится несколько тысяч наверно-каждый сдвиг фишки на поле, да и расходы на сохранить/открыть. Ну ладно с ней отладкой, до конечного решения доходит, но долго. Мне нужно сделать чтобы пр каждом сдвиге фишки происходила отрисовка, я сделал вот так (просто для проверки):
C#
1
2
3
4
5
6
7
8
int j = 0;
for (int i = 0; i < 100; i++)
{
   array[2, 0] = array[j, 0];
   drawField(array);
   if (i %2 == 0)
      j = 0;
}
но ничего на форме не меняется, только последняя отрисовка происходит, я думаю может быть просто не успевает отрисовывать?
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
06.01.2013, 14:37
Так сделайте задержку между ходами.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
06.01.2013, 14:53  [ТС]
System.Threading.Thread.Sleep(2000); не помог, сейчас попробую в отдельном потоке
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
06.01.2013, 15:27
System.Threading.Thread.Sleep(2000); блокирует текущий поток!

Можно так:
C#
1
2
3
4
5
            int ticks = Environment.TickCount + 2000;
            while (Environment.TickCount < ticks)
            {
                Application.DoEvents();
            }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2013, 15:27
Помогаю со студенческими работами здесь

Как задать плавное перемещение картинки в PictureBox (или перемещение самого PictureBox) из точки А в точку Б по прямой?
Необходимо задать плавное перемещение по прямой линии из &quot;А&quot; в &quot;Б&quot; по нажатию &quot;Button&quot;

Как во время отладки посмотреть содержимое массивов?
привет! есть пара вопросов по отладке кода -как во время отладки посмотреть содержимое массивов -как сразу попасть в нужную итерацию...

Как узнать значение массива по указателю во время отладки?
А как посмотреть значения массива, если есть только указатель на его первый элемент? Например: typedef double arr; double *ptr =...

Как отключить работу точек останова во время отладки?
Microsoft Visual Studio Community 2017 Версия 15.6.7 VisualStudio.15.Release/15.6.7+27428.2043 Microsoft .NET Framework ...

Как осуществить функцию drag&drop на форме во время отладки?
Нужно разместить на форме несколько combobox'ов и после отладки их нужно будет передвинуть на предполагаемые для них места на объекте image...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru