Winforms DataGridView行:半透明选择或选择上的行边框

Winforms DataGridView行:半透明选择或选择上的行边框,winforms,datagridview,selection,row,Winforms,Datagridview,Selection,Row,我有一个DataGridView,其中每行的背景根据数据绑定项的不同而不同。但是,当我选择一行时,我无法再看到它的原始背景色 为了解决这个问题,我想到了两个解决方案: 我可以将选择设置为半透明,这样就可以查看两个选定行是否具有不同的背景颜色 或;我可以完全删除选择颜色,并在选定行周围绘制边框 什么选项更容易?我如何才能做到这一点 这是一个WinForm应用程序 编辑:我最终使用了你的一些代码,漂流 private void dgv_RowPrePaint(object sender, D

我有一个DataGridView,其中每行的背景根据数据绑定项的不同而不同。但是,当我选择一行时,我无法再看到它的原始背景色

为了解决这个问题,我想到了两个解决方案:

我可以将选择设置为半透明,这样就可以查看两个选定行是否具有不同的背景颜色

或;我可以完全删除选择颜色,并在选定行周围绘制边框

什么选项更容易?我如何才能做到这一点

这是一个WinForm应用程序

编辑:我最终使用了你的一些代码,漂流

    private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
    {
        if (dgv.Rows[e.RowIndex].Selected)
        {
            var row = dgv.Rows[e.RowIndex];
            var bgColor = row.DefaultCellStyle.BackColor;
            row.DefaultCellStyle.SelectionBackColor = Color.FromArgb(bgColor.R * 5 / 6, bgColor.G * 5 / 6, bgColor.B * 5 / 6);
        }
    }

这给人的印象是半透明的选择颜色。谢谢你的帮助

如果要在选定行周围绘制边框,可以使用,要“清除”选择颜色,可以使用和属性

例如,如果我像这样设置行单元格样式

row.DefaultCellStyle.BackColor = Color.LightBlue;
row.DefaultCellStyle.SelectionBackColor = Color.LightBlue;
row.DefaultCellStyle.SelectionForeColor = dataGridView1.ForeColor;
我可以将此代码添加到
RowPostPaintEvent

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    if (dataGridView1.Rows[e.RowIndex].Selected)
    {
        using (Pen pen = new Pen(Color.Red))
        {
            int penWidth = 2;

            pen.Width = penWidth;

            int x = e.RowBounds.Left + (penWidth / 2);
            int y = e.RowBounds.Top + (penWidth / 2);
            int width = e.RowBounds.Width - penWidth;
            int height = e.RowBounds.Height - penWidth;

            e.Graphics.DrawRectangle(pen, x, y, width, height);
        }
    }
}
选定的行将显示如下所示:


我试了一下,感觉很好。然后出现了一个新问题-透明选择颜色在排序后看起来非常难看(文本位于旧文本和其他内容上,很难解释;)),因此我将寻找另一个解决方案。我使用您的代码创建了半透明选择颜色-请参阅编辑。谢谢你的帮助!