我正在尝试为 datagridview 创建一个上下文菜单。我从这里尝试了一些示例,但无法理解为什么对于单击的任何行,下面总是返回 -1。这是一个winforms,网格是从数据表中填充的。我在这里做错了什么?
DataGridView.HitTestInfo hit = dgvResults.HitTest(e.X, e.Y);
我的代码:
private void dgvResults_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0 && e.Button == MouseButtons.Right)
{
DataGridView.HitTestInfo hit = dgvResults.HitTest(e.X, e.Y); \\ this shows as -1 always
if (hit.Type == DataGridViewHitTestType.Cell)
{
dgvResults.CurrentCell = dgvResults[hit.ColumnIndex, hit.RowIndex];
cmsResults.Show(dgvResults, e.X, e.Y);
}
}
}
当我使用 MouseClick 事件时,它似乎起作用了,我有点迷失在这里
private void dgvResults_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = dgvResults.HitTest(e.X, e.Y).RowIndex;
cmsResults.Show(dgvResults, new Point(e.X, e.Y));
}
}
编辑:
我终于让它与下面的代码一起工作。
谢谢大家
对我有用的代码:
private void dgvResults_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = dgvResults.HitTest(e.X, e.Y).RowIndex;
dgvResults.ClearSelection();
if (currentMouseOverRow >= 0) // will show Context Menu Strip if not negative
{
dgvResults.Rows[currentMouseOverRow].Selected = true;
cmsResults.Show(dgvResults, new Point(e.X, e.Y));
row = currentMouseOverRow;
}
}
}