我正在使用以下代码构建图表。我需要能够通过鼠标单击来更改任何给定矩形的颜色。到目前为止,我无法找到实现这一目标的方法。
任何想法都将不胜感激。
int number;
public List<Rectangle> listRec = new List<Rectangle>();
Graphics g;
public CrochetPtrnDesign()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
number = int.Parse(textBox1.Text);
Rectangle rect = new Rectangle();
listRec.Clear();
rect.Size = new Size((pnlDesign.Width - 1) / number, (pnlDesign.Height - 1) / number);
for (int x = 0; x < number; x++)
{
rect.X = x * rect.Width;
for (int y = 0; y < number; y++)
{
rect.Y = y * rect.Height;
listRec.Add(rect);
}
}
}
catch
{
MessageBox.Show("Please enter a number...");
}
foreach (Rectangle rec in listRec)
{
g = pnlDesign.CreateGraphics();
Pen p = new Pen(Color.Black);
g.DrawRectangle(p, rec);
}
}
答案 0 :(得分:0)
这不能解决选择颜色的问题,但您可以通过添加以下内容来开始:
private void pnlDesign_MouseClick(object sender, MouseEventArgs e)
{
using (Brush brush = new SolidBrush(Color.Red))
{
g.FillRectangle(brush, listRec.Where(r => r.Contains(new Point { X = e.X, Y = e.Y })).First());
}
}
编辑:
更新为使用Reza的推荐。
答案 1 :(得分:-1)
如果需要用颜色填充矩形,请尝试使用FillRectangle方法。
如果您需要通过再次使用不同的颜色再次调用以下代码来更改ReRender它的边框颜色:
g = pnlDesign.CreateGraphics();
Pen p = new Pen(Color.Black);
g.DrawRectangle(p, rec);
答案 2 :(得分:-1)
我找到了实现这个目标的方法。这是我现在使用的代码。我仍然需要构建颜色选择工具,但我认为这将是一个简单的部分。 您的所有建议都帮助我找到了解决方案。我感谢你们所有人。
private void pnlDesign_MouseClick(object sender, MouseEventArgs e)
{
Point point = pnlDesign.PointToClient(Cursor.Position);
SolidBrush blueBrush = new SolidBrush(Color.Blue);
int listCount = 0;
for (listCount = 0; listCount < number * number; listCount++)
{
if (listRec[listCount].Contains(point))
{
g.FillRectangle(blueBrush, listRec[listCount]);
}
}
}