winform中dataGridView如何实现按钮列控制图片列

winform中dataGridView如何实现按钮列控制图片列,点击关闭按钮,亮红灯,按钮text变为打开;再次点击按钮,亮绿灯,text显示为关闭。

img

用下面的代码试试,我没调整样式
下面代码里面有一行 Image.Equals(CircularRed) 因为我的图片实例是相同的所以直接这样比较就行了,假如说你的实例不同可以借助Row.Cells["Image"].Tag来进行比较


/// <summary>
        /// 测试
        /// </summary>
        public void TestDelegate()
        {
            //pictureBox_Test.Image = CircularRed;

            //红色圆形
            var CircularRed = GetCircular(System.Drawing.Color.Red);
            //绿色圆形
            var CircularGreen = GetCircular(System.Drawing.Color.Green);

            dataGridView.Columns.Add(new DataGridViewImageColumn
            {
                Name = "Image",
                HeaderText = "图片",
            });
            dataGridView.Columns.Add(new DataGridViewButtonColumn
            {
                Name = "Button",
                HeaderText = "按钮",
                //UseColumnTextForButtonValue = true,
                //Text = "打开"
            });
            dataGridView.Rows.Add(CircularRed, "打开");
            dataGridView.Rows.Add(CircularRed, "打开");
            dataGridView.Rows.Add(CircularRed, "打开");
            dataGridView.CellClick += (sender, e) =>
            {
                if (e.RowIndex < 0)
                {
                    return;
                }
                if (dataGridView.Columns[e.ColumnIndex].Name.Equals("Button"))
                {
                    //确保是按钮这一列
                    var Row = dataGridView.Rows[e.RowIndex];
                    var Image = Row.Cells["Image"].Value;
                    if (Image.Equals(CircularRed))
                    {
                        Row.Cells["Image"].Value = CircularGreen;
                        Row.Cells["Button"].Value = "关闭";
                    }
                    else
                    {
                        Row.Cells["Image"].Value = CircularRed;
                        Row.Cells["Button"].Value = "打开";
                    }
                }
            };
        }

        /// <summary>
        /// 获取一个圆形
        /// </summary>
        /// <param name="color">颜色</param>
        /// <returns></returns>
        public System.Drawing.Bitmap GetCircular(System.Drawing.Color color)
        {
            System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(50, 50);
            System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
            var Pen = new Pen(color);
            var RectangleF = new RectangleF(10, 10, 30, 30);

            System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(color);
            graphics.FillEllipse(myBrush, RectangleF);
            graphics.DrawEllipse(Pen, RectangleF);
            graphics.Dispose();
            return bitmap;
        }

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^