Drawing a filled circle or rectangle inside a DataGridViewCell in C# Winforms

前端 未结 3 1907
有刺的猬
有刺的猬 2021-01-04 22:46

I want to draw a small filled circle in the center of a DataGridViewCell. A rectangle can do the trick as well. I assume I must do it in the CellPainting event.

3条回答
  •  执笔经年
    2021-01-04 23:23

    Thank's for your question and answer @Andres .

    Please see my response : (for example) I have a datagridview with 2 columns. In column first I want display a color circle that color of it is write(color name) in column 2. for this my code is :

    for (int i = 1; i <= 5; i++)
        Dgv.Rows.Add();
    Dgv[1, 0].Value = "Red";
    Dgv[1, 1].Value = "Blue";
    Dgv[1, 2].Value = "Yellow";
    Dgv[1, 3].Value = "Green";
    Dgv[1, 4].Value = "Black";
    

    For create a circle I write this class code:

    public static class GraphicsExtensions
    {
        public static void FillCircle(this Graphics g, Brush brush, float centerX, float centerY, float radius)
        {
            g.FillEllipse(brush, centerX - radius, centerY - radius, radius + radius, radius + radius);
        }
    }
    

    In CellPainting event of my datagridview, write this code :

    private void Dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.ColumnIndex == 0 && e.RowIndex > -1)
        {
            Brush Brs= new SolidBrush(Color.FromName(Dgv[1, e.RowIndex].Value.ToString()));
            GraphicsExtensions.FillCircle(e.Graphics, Brs, e.CellBounds.Location.X + 5, e.CellBounds.Location.Y + 10, 5);
            e.Handled = true;                
        }
    }
    

    Result is datagridview with 2 columns :

    column 1 : 6 circle with 6 specific color

    column 2 : 6 color name

    Thanks.

提交回复
热议问题