试图隔离矩形列表中的矩形C#

时间:2014-05-21 23:48:13

标签: c# arrays forms mouse

我使用列表制作了一个矩形网格。到目前为止,如果用户点击这些矩形中的任何一个,则所有这些矩形都将变为红色。然而,这不是我的目标,但是,我制作用户点击的一个矩形的目标对我来说很难。

到目前为止我的代码就是这个。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Quoridor
{
    public partial class Form1 : Form
    {       
        private Pen pen = Pens.Black;        

        List<Rectangle> recList = new List<Rectangle>();

        public Form1()
        {
            InitializeComponent();

            for (int x = 0; x < 12; x++)
            {
                for (int y = 0; y < 12; y++)
                {
                    recList.Add(new Rectangle(x * 50, y * 50, 100, 100));
                }

                Application.DoEvents();
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            foreach (Rectangle rec in recList)
            {                             
                e.Graphics.DrawRectangle(pen, rec);
            }

        }


        private void Form1_Click(object sender, EventArgs e)
        {
            Point cursor = this.PointToClient(Cursor.Position);

            foreach (Rectangle rec in recList)
            {
                if (rec.Contains(cursor))
                {
                    pen = Pens.Red;
                }
            }

            Invalidate();
        }
    }
}

这是我开始编码后的第二个月,请放轻松对待我:D

1 个答案:

答案 0 :(得分:1)

问题是你的表单只有一支笔。这段代码在这里:

        foreach (Rectangle rec in recList)
        {
            if (rec.Contains(cursor))
            {
                pen = Pens.Red;
            }
        }

实际上是在说“如果光标位于我的任何一个矩形中,请将笔转为红色,然后再用红笔绘制所有内容”。

您希望每个矩形都有自己的笔。

这是一种方法。这只是我没有测试的粗略代码。如果它没有编译,那么你必须找出自己的原因。但这种方法可以帮助你:

namespace Quoridor
{
    public partial class Form1 : Form
    {       
        class RectangleAndPen
        {
             public Rectangle Rectangle { get; set; }
             public Pen Pen { get; set; }
        }

        List<RectangleAndPen> recList = new List<RectangleAndPen>();

        public Form1()
        {
            InitializeComponent();

            for (int x = 0; x < 12; x++)
            {
                for (int y = 0; y < 12; y++)
                {
                    recList.Add(new RectangleAndPen 
                               { 
                                   Rectangle = new Rectangle(x * 50, y * 50, 100, 100),
                                   Pen = Pens.Black
                               }
                }

                Application.DoEvents();
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            foreach (RectangleAndPen r in recList)
            {                             
                e.Graphics.DrawRectangle(r.Pen, r.Rectangle);
            }

        }


        private void Form1_Click(object sender, EventArgs e)
        {
            Point cursor = this.PointToClient(Cursor.Position);

            foreach (RectangleAndPen r in recList)
            {
                if (r.Rectangle.Contains(cursor))
                {
                    r.Pen = Pens.Red;
                }
            }

            Invalidate();
        }
    }
}