Winforms hitTest.RowIndex始终为-1

Winforms hitTest.RowIndex始终为-1,winforms,c#-3.0,Winforms,C# 3.0,在项目中有一个DataGridView 我有一点代码,我可以根据它显示信息 单击的单元格 我的问题是如何检测用户是否单击了列或行 标题(单元格以外的任何内容) 所有这些都与“dataGridView1_CellMouseDown”方法有关,我使用 HitTest尝试检测用户单击的内容,但我所做的一切 当用户单击单元格时,获取为“TopLeftHeader”和“None” 使用CellMouseDown事件,行索引始终显示为-1 改为使用控件的MouseDown事件,它将为您提供基于控件的坐标 请

在项目中有一个DataGridView

我有一点代码,我可以根据它显示信息 单击的单元格

我的问题是如何检测用户是否单击了列或行 标题(单元格以外的任何内容)

所有这些都与“dataGridView1_CellMouseDown”方法有关,我使用 HitTest尝试检测用户单击的内容,但我所做的一切 当用户单击单元格时,获取为“TopLeftHeader”和“None”
使用
CellMouseDown
事件,行索引始终显示为-1

改为使用控件的
MouseDown
事件,它将为您提供基于控件的坐标


请参阅。

您仍然可以使用CellMouseDown事件处理程序。事实上,我发现它有点干净,因为对于MouseDown事件,您必须创建一个HitTest来获取所选行

以下代码等效:

    private void dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        // If right-click
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            // Get selected row
            var selectedRow = dgvBatches.Rows[e.RowIndex];
        }
    }

    private void dgv_MouseDown(object sender, MouseEventArgs e)
    {
        // If right-click
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            // Get the selected row/column
            DataGridView.HitTestInfo info = dgvBatches.HitTest(e.X, e.Y);

            // Get selected row
            var selectedRow = dgvBatches.Rows[info.RowIndex];
        }
    }