Je suis en train de créer un menu contextuel pour un datagridview. J'ai essayé quelques exemples d'ici mais je ne comprends pas pourquoi le code ci-dessous renvoie toujours -1 pour n'importe quelle ligne cliquée. Il s'agit de winforms et la grille est remplie à partir d'une table de données. Que est-ce que je fais mal ici?
DataGridView.HitTestInfo hit = dgvResults.HitTest(e.X, e.Y);
Mon code:
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); \\ cela montre toujours -1
if (hit.Type == DataGridViewHitTestType.Cell)
{
dgvResults.CurrentCell = dgvResults[hit.ColumnIndex, hit.RowIndex];
cmsResults.Show(dgvResults, e.X, e.Y);
}
}
}
Quand j'utilise l'événement MouseClick, cela semble fonctionner, je suis un peu perdu ici
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));
}
}
Éditer:
J'ai enfin réussi à le faire fonctionner avec le code ci-dessous.
Merci à tous
Code qui a fonctionné pour moi:
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) // va afficher le menu contextuel s'il n'est pas négatif
{
dgvResults.Rows[currentMouseOverRow].Selected = true;
cmsResults.Show(dgvResults, new Point(e.X, e.Y));
row = currentMouseOverRow;
}
}
}