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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2013, 23:12   #1
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию Random отрисовка фигур

Добрый день.
Есть PictureBox, на нем хочу рисовать поток прямоугольников, закрашенных рэндомными цветами.Движение прямоугольников начинается с координат {0,0}, движение происходит по OX вправо(через 5 пикселей например) и заканчивается правым краем PictureBox'a(предыдущие прямоугольники закрашиваются).

Пока получилось только это:

Код:
int x = 0;
            int y = 0;
            int myWidth = 0;
            int myHeight = 0;

           Random  MyRand = new Random();

           Color RandomColor = Color.FromArgb(MyRand.Next(255), MyRand.Next(255), MyRand.Next(255));
           e.Graphics.DrawRectangle(new Pen(RandomColor),  x,  y, myWidth, myHeight );

           for (int i = 0; i < 50; i++ )
           {
               x = MyRand.Next(25) + 100;
               y = MyRand.Next(25) + 100;
               

               myWidth = MyRand.Next(25) + 50;
               myHeight = MyRand.Next(25) + 50;

               e.Graphics.DrawRectangle(new Pen(RandomColor), x, y, myWidth, myHeight);

Последний раз редактировалось mdekalka; 13.01.2013 в 23:33.
mdekalka вне форума Ответить с цитированием
Старый 14.01.2013, 00:19   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

А в чем вопрос?
Reskov вне форума Ответить с цитированием
Старый 14.01.2013, 00:23   #3
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию

Как реализовать движение по Ox?
Почему прямоугольники всегда одного цвета?
Как сделать задержку, чтобы была видна отрисовка в реальном времени(как в Java :Thread.sleep(100) ?
mdekalka вне форума Ответить с цитированием
Старый 14.01.2013, 00:33   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
Почему прямоугольники всегда одного цвета?
Внесите
Код:
  Color RandomColor = Color.FromArgb(MyRand.Next(255), MyRand.Next(255), MyRand.Next(255));
в тело цикла)
Цитата:
Как реализовать движение по Ox?
Код:
 x = MyRand.Next(25) + i*100;
Цитата:
Как сделать задержку, чтобы была видна отрисовка в реальном времени
вынести весь код таймер тик
Reskov вне форума Ответить с цитированием
Старый 14.01.2013, 12:17   #5
mdekalka
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 14
По умолчанию

Спасибо.
Но возник еще один вопрос: сделал таймер: как вызвать методы ShowRectangleLogo(...) или pictureBox1_Paint(...)?

Код:
Timer myTimer = new Timer();

  private void myTimerStart()
        {
            myTimer.Interval = 1000;
            myTimer.Tick +=new System.EventHandler(ShowRectangleLogo);   //что же тут надо сделать?
            myTimer.Enabled = true;
            
            
        
        }

   private void ShowRectangleLogo(Graphics g)
        {
            Brush br = new SolidBrush(Color.White);

            Font font = new Font("Comic Sans", 25, FontStyle.Italic); 
            PointF pt = new PointF(ClientSize.Width / 3 + 15, ClientSize.Height / 3 + 33);         
            g.DrawString(" piuGame ", font, br, pt);
          
        }


private void pictureBox1_Paint(object sender, PaintEventArgs e)
        { 
                   ...
        }
mdekalka вне форума Ответить с цитированием
Старый 14.01.2013, 23:24   #6
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

попробуйте
Код:
pictureBox1.Invalidate();
http://msdn.microsoft.com/ru-ru/libr...nvalidate.aspx
Ps а Timer добавьте соответвующий контрол лучше на форму
Reskov вне форума Ответить с цитированием
Старый 15.01.2013, 06:48   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Передать метод можно написав новый (соответствующий делегату, ибо Ваши методы не соответствуют), или быстрее через лямбду примерно так
Код:
 timer1.Tick += new EventHandler((object o, EventArgs ea) => pictureBox1.Invalidate());
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрисовка графика на C++ Angriff Visual C++ 0 12.12.2012 18:31
Отрисовка легенды Алек JavaScript, Ajax 2 08.12.2011 16:38
отрисовка updown edik Компоненты Delphi 0 27.12.2009 12:39
Отрисовка компонентов Dr.Badnezz Компоненты Delphi 1 04.01.2009 16:50