开发者

Get RowIndex via ContextMenu?

开发者 https://www.devze.com 2023-02-15 11:42 出处:网络
I\'m trying to get a rowindex of row at which I right clicked to call a con开发者_如何学编程textmenu.

I'm trying to get a rowindex of row at which I right clicked to call a con开发者_如何学编程textmenu.

DatagridView's property contextmenu is set to this contextmenu.

Is it possible in some simple way?

Best regards


Yes, you need to handle the MouseDown event for your DataGridView and then use the HitTest method to return row and/or column index for the given coordinates.

For example:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
        if (hit.Type == DataGridViewHitTestType.Cell)
        {
            Console.WriteLine(hit.RowIndex);
        }
    }
}


I change the selection in the CellContextMenuStripNeeded event and then use the SelectedRows member to find it.

private void dataGridView_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
    var Dgv = sender as DataGridView;
    if (Dgv != null)
    {
        // Change the selection to reflect the right-click
        Dgv.ClearSelection();
        Dgv.Rows[e.RowIndex].Selected = true;
    }
}

private void myToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Now pick up the selection as we know this is the row we right-clicked on
    if (dataGridView.SelectedRows.Count > 0)
    {
        DoSomethingAmazing(dataGridView.SelectedRows[0]);
    }
}

This also has the desired effect of highlighting a row that you r-click on.

0

精彩评论

暂无评论...
验证码 换一张
取 消