Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2013, 00:18   #1
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию Прорисовка на pictureBox.

Добрый день.
Рисую на pictureBox движение картинок, в зависимости от того, какое число срэндомилось в textBox на такую длину и двигаем картинку.
Возникло 2 проблемы:1) при нажатии на кнопку, которая сгенерирует число в textbox, сначало происходит движение картинки, а уже потом появляется число в textBox- как сделать наоборот?
2)При движении еще раз старая картинка стирается, как это исправить?

Код:
// random number:
 private void button1_Click_1(object sender, EventArgs e)
        {
            
            textBox1.Text = Convert.ToString(rand.Next(1,7));

                      resultP1 = Convert.ToInt32(textBox1.Text);

            GetMove(resultP1);
        }
//draw icon's move:

 private void GetMove(int move)
        {
            int myMove;
            myMove = move;

            if (myMove==1)
            {

                Graphics g = pictureBox2.CreateGraphics();

                int x = 7;
                int y = 390;

                int x1 = 7;
                int y1 = 430;

                for (int i = 0; i < 23; i++)
                {

                    imageList1.Draw(g, i * x, y, 0);
                    imageList1.Draw(g, i * x1, y1, 1);

                     if (i < 22)
                    {
                        pictureBox2.Refresh();
                    }

                }
            

            }
            else if (myMove==2)
            {

                Graphics g = pictureBox2.CreateGraphics();

                int x = 7;
                int y = 390;

                int x1 = 7;
                int y1 = 430;



                for (int i = 0; i < 39; i++)
                {


                    imageList1.Draw(g, i * x, y, 0);
                    imageList1.Draw(g, i * x1, y1, 1);

                    if (i < 38)
                    {
                        pictureBox2.Refresh();
                    }



                }
            }
}
mdekalka вне форума Ответить с цитированием
Старый 02.02.2013, 13:13   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Проектом киньте, гляну, что там за сложности.
phomm вне форума Ответить с цитированием
Старый 02.02.2013, 13:47   #3
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

Код конечно замечательный, сначала вы преобразуется число в строку а потом обратно . По первому пункту, возможно стоит вызвать Refresh() в textbox после того как в него вставили число, по второму пункту, когда вызывается pictureBox2.Refresh() окошко очищается.
microbit вне форума Ответить с цитированием
Старый 02.02.2013, 14:54   #4
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию

Проблемы те же:анимация раньше появления числа, оставить отрисованную картинку.
Вложения
Тип файла: rar GDITest.rar (62.3 Кб, 14 просмотров)
mdekalka вне форума Ответить с цитированием
Старый 03.02.2013, 10:31   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Проблема с числом решается вызовом Application.DoEvents(); после установки числа.

Проблема с "оставить картинку" не решается никак при текущей архитектуре.
Поясняю, текущая картинка это лишь симулированная анимированная перерисовка некоей картинки в цикле с постоянной очисткой всего полотна. Причём перерисовка происходит по заданным "ничейным" координатным числам, а чтобы сделать то, что Вы хотите - надо эти координаты кому-то дать. Например, создать класс или структуру, экземпляры которой будут создаваться, перемещаться по заданному закону (тупо меняются координаты и перерисовывается с новыми координатами). При этом уже существующие экземпляры - так и хранят свои координаты и отрисовываются в них.

Вложил примерный принцип работы такого алгоритма, переделав из Вашего. Пришлось много чего порезать, ибо в таком коде неприятно копаться, советую поизучать труды по стилю кода и алгоритмизации задач вообще.

Отдельного внимания удостаивается неправильный подход к движению картинок - делать его надо не так как Вы сделали - расписывая каждый случай с чудовищным копипастом кода - а опять же задача алгоритмизируется - выводятся формулы, закономерности и отражаются в коде, большая часть которого лишь исполнитель - и получает данные извне - а не хранит внутри себя самого все числа - используйте параметры для такого кода и константы в случае необходимости задания коэффициентов.
Вложения
Тип файла: zip Form1.zip (1.3 Кб, 24 просмотров)
phomm вне форума Ответить с цитированием
Старый 03.02.2013, 19:32   #6
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию

Приму к сведению.Спасибо.
mdekalka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прорисовка фигуры serres Общие вопросы .NET 1 06.09.2010 23:53
Прорисовка линии dmitriegorovih Общие вопросы Delphi 13 16.07.2010 13:09
Прорисовка ListView akosh12345 Компоненты Delphi 6 04.06.2010 00:55
Прорисовка меню al072 Общие вопросы C/C++ 9 10.02.2010 17:10
с# прорисовка MAcK Общие вопросы .NET 1 29.08.2008 16:48