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