Как рисовать эллипсы с интервалом в PictureBox - PullRequest
0 голосов
/ 27 декабря 2011

Я хочу сделать простое моделирование с использованием эллипсов. В пользовательском интерфейсе будет кнопка. Пользователь нажимает кнопку, затем с интервалом в 1 секунду эллипсы будут отображаться в pictureBox. Как светофор ...

Полагаю, мне нужно использовать Timer Event, но не знаю как. Как мне этого добиться?

Мои наилучшие пожелания ...

CodeWork

public void Button1_Click(Object sender, EventArgs e)
{
   DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1);
   DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen);
}

class DrawCell
{
   for (int z = 0; z < Ortamlar.HucreSayisi; z++)
   {
         Pen Kalem = new Pen(Brushes.CadetBlue);
         Rectangle rect = new Rectangle(((Ortamlar.HUCREKorX[z] / ScaleFactor - Ortamlar.HUCREYaricap[z] / ScaleFactor)
                        * ZoomKontrolCarpan) / ZoomKontrolBolen, (Ortamlar.HUCREKorY[z] / ScaleFactor - Ortamlar.HUCREYaricap[z] / ScaleFactor) *
                        ZoomKontrolCarpan / ZoomKontrolBolen, (2 * Ortamlar.HUCREYaricap[z] / ScaleFactor) * ZoomKontrolCarpan / ZoomKontrolBolen
                        , (2 * Ortamlar.HUCREYaricap[z] / ScaleFactor) * ZoomKontrolCarpan / ZoomKontrolBolen);

         if (Ortamlar.HUCREYZ[z] == "001:400")
         {
                g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z] / ScaleFactor)
                    * ZoomKontrolCarpan) / ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z] / ScaleFactor) *
                    ZoomKontrolCarpan / ZoomKontrolBolen);
                g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600));
                g.DrawEllipse(Kalem, rect);

                g.FillEllipse(Brushes.Wheat, rect);
                g.ResetTransform();

                picturebox1.Image = bmp;
                bmp1 = (Bitmap)picturebox1.Image;
          }
          if (Ortamlar.HUCREYZ[z] == "401:800")
          {
                        g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z] / ScaleFactor)
                    * ZoomKontrolCarpan) / ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z] / ScaleFactor) *
                    ZoomKontrolCarpan / ZoomKontrolBolen);
                        g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600));
                        g.DrawEllipse(Kalem, rect);

                        g.FillEllipse(Brushes.Yellow, rect);

                        g.ResetTransform();
                        picturebox1.Image = bmp;
                        bmp2 = (Bitmap)picturebox1.Image;
          }
          if (Ortamlar.HUCREYZ[z] == "801:120")
          {
                        g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z] / ScaleFactor)
                    * ZoomKontrolCarpan) / ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z] / ScaleFactor) *
                    ZoomKontrolCarpan / ZoomKontrolBolen);
                        g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600));
                        g.DrawEllipse(Kalem, rect);

                        g.FillEllipse(Brushes.Green, rect);
                        g.ResetTransform();

                        picturebox1.Image = bmp;
                        bmp3 = (Bitmap)picturebox1.Image;
          }
          if (Ortamlar.HUCREYZ[z] == "121:161")
          {
                        g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z] / ScaleFactor)
                    * ZoomKontrolCarpan) / ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z] / ScaleFactor) *
                        ZoomKontrolCarpan / ZoomKontrolBolen);
                        g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600));
                        g.DrawEllipse(Kalem, rect);

                        g.FillEllipse(Brushes.Blue, rect);

                        g.ResetTransform();
                        picturebox1.Image = bmp;
                        bmp4 = (Bitmap)picturebox1.Image;
          }
    }
}

1 Ответ

1 голос
/ 27 декабря 2011

Я не совсем понимаю цель того, что вы спрашиваете, но я предполагаю, что вы можете приблизиться, прочитав эти ссылки.

first проведет вас через большую часть того, что вам нужно знать об управлении таймером.

секунда позволит вам узнать, как рисовать эллипсы.

О том, как структурировать ваш код, проще говоря, я получил бы кнопку для запуска таймера, затем событие timerElapsed будет управлять созданием эллипсов в графическом окне, каждую 1 секунду.

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

[edit1]

Это создаст эллипсы, пока таймер не остановится, вы можете добавить кнопку, чтобы остановить таймер1:

public void Button1_Click(Object sender, EventArgs e)
{
    timer1.Interval = 1000;
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1);
    DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen);
}

Не забывайте, что вам нужно перетащить таймер на дизайн, а затем дважды щелкнуть событие Tick на панели свойств .

Этот ответ предполагает, что с классом DrawCell все в порядке.

[edit2]

Я думал о том, что я написал, и это создаст эллипсы, пока таймер не остановится. Поэтому вы можете захотеть добавить оператор while, чтобы контролировать, сколько рисовать эллипсов. Проверьте эту ссылку , чтобы увидеть другие способы реализации этого.

Таким образом, вы можете установить количество эллипсов для рисования, это пример, но есть много способов сделать это.

//create this field and property before the constructor
public int counter;
public int Counter
{
    get { return counter; }
    set { counter = value; }
}

//button click sets the interval to 1sec, starts timer and sets the int Counter to 0
private void button1_Click(object sender, EventArgs e)
{
    timer1.Interval = 1000;
    timer1.Start();
    Counter = 0;
}

//the tick event iterates the Counter property +1 everytime the timer advances 1sec and while Counter is under 5 for example it creates those objects
private void timer1_Tick(object sender, EventArgs e)
{
    Counter++;
    while (counter < 5)
    {
        DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1);
        DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen);
    }
}
...