我使用列表制作了一个矩形网格。到目前为止,如果用户点击这些矩形中的任何一个,则所有这些矩形都将变为红色。然而,这不是我的目标,但是,我制作用户点击的一个矩形的目标对我来说很难。
到目前为止我的代码就是这个。
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
答案 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();
}
}
}