0

私はC#が初めてで、配列を使用して四角形を描画する必要があります。私のコードは次のとおりです。

        Rectangle[] rec;
        int rec_part=2;

        public Form1()
        {
            InitializeComponent();
            rec = new Rectangle[rec_part];

            for (int i = 0; i <rec_part; i++)
            {
                rec[i] = new Rectangle(10, 100, 40,40);
            }
        }

したがって、私のコードは一度に 1 つの Rectangle のみを描画します。

        Graphics g;
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
             g = e.Graphics;

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

                g.FillRectangle(new SolidBrush(Color.Blue), rec[i]);  //exception here

            }
        }

問題は、長方形を移動したいと同時に、長方形配列の長さを増やしたいということです! すなわち

        int speed = 2;
        private void timer1_Tick(object sender, EventArgs e)
        {

            for (int i = 0; i < rec.Length; i++)
            {

                rec[i].X += speed;
                rec_part+=1;          // here i want to increment the rectangles
                this.Refresh();
            }


        }

私の目的は、タイマーが機能し始めたら、長方形の数を増やすことです。しかし、境界外のインデックスの例外が発生しています! どうすればそれを行うことができますか?前もって感謝します!

4

2 に答える 2

0

コードを変えるだけなら

if (rec_part == rec.Length)
    rec_part = 0;
else
    rec_part += 1; 

それが動作します。しかし、あなたがやりたいことを詳しく説明していただけますか?

于 2014-05-26T07:24:28.107 に答える
0

配列に要素を追加することはできません。リストを使用します。

private List<Rectangle> rectangleList = new List<Rectangle>();

次に、好きなだけ長方形を追加できます。

rectangleList.Add(new Rectangle(10, 100, 40,40));

C# では、for ループの代わりに foreach ループを使用できます。

foreach(var r in rectangleList)
{
   g.FillRectangle(new SolidBrush(Color.Blue), r);
}
于 2014-05-26T07:24:58.927 に答える