如何在winforms网格中更改矩形的背景颜色

本文关键字:背景 颜色 winforms 网格 | 更新日期: 2023-09-27 18:03:20

我正在使用以下代码构建一个图形。我需要能够改变颜色的任何给定的矩形通过点击它与鼠标。到目前为止,我还没有找到一个方法来完成这件事。

任何想法都将非常感激。

    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);
        }
    }

如何在winforms网格中更改矩形的背景颜色

这并不能解决选择颜色的问题,但您可以通过添加以下内容开始:

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的推荐。

如果需要用颜色填充矩形,请尝试FillRectangle方法。

如果你只需要改变边框的颜色,你需要用不同的颜色再次调用下面的代码来渲染它:

g = pnlDesign.CreateGraphics();
Pen p = new Pen(Color.Black);
g.DrawRectangle(p, rec);

我找到了一个方法来完成这个任务。这是我现在使用的代码。我仍然需要建立颜色选择工具,但我认为这将是简单的部分。你所有的建议都帮助我找到了解决办法。谢谢大家。

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]);
        }
    }
}