如何识别DataGridView中悬停的特定单元格

时间:2015-08-08 09:23:29

标签: c# winforms datagridview cell

我在所有datagridview行的末尾放了一张图片,以便在按下时删除行。 enter image description here 我想在特定的单元格鼠标悬停上更改该图片的颜色(为了表明它是用户的交互式按钮)。

然而,在所有解决方案中,我发现完整的DGV鼠标悬停已被删除。 我需要的是:了解如何在细胞鼠标悬停期间找到特定细胞悬停

2 个答案:

答案 0 :(得分:2)

如果这是WindowsForms:

//when mouse is over cell
    private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
        {
            dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Black;
        }
    }
//when mouse is leaving cell
    private void dataGridView1_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
        {
            dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.White;
        }
    }

答案 1 :(得分:0)

老问题,@titol 的回答很好,但我不喜欢为此使用事件 CellMouseMove(它触发得太频繁)。

我建议在鼠标输入时使用 CellMouseEnter 进行捕获,当然还有 CellMouseLeave。像这样:

    void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e) {
        if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
        var gv = sender as DataGridView;
        var column = gv.Columns[e.ColumnIndex];
        if (myLogicToCheckIfIsTrashButtonColumn(column)) {
            gv[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Black;
            gv.InvalidateCell(gv.Rows[e.RowIndex].Cells[e.ColumnIndex]);
        }
    }

    void downloadFilesGv_CellMouseLeave(object sender, DataGridViewCellEventArgs e) {
        if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
        var gv = sender as DataGridView;
        var column = gv.Columns[e.ColumnIndex];
        if (myLogicToCheckIfIsTrashButtonColumn(column)) {
            gv[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.White;
            gv.InvalidateCell(gv.Rows[e.RowIndex].Cells[e.ColumnIndex]);
        }
    }