Получить RowIndex через ContextMenu? - PullRequest
1 голос
/ 09 марта 2011

Я пытаюсь получить индекс строки, по которому я щелкнул правой кнопкой мыши для вызова контекстного меню.

Свойство contextmenu объекта DatagridView установлено в это контекстное меню.

Возможно ли это каким-то простым способом?

С уважением

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Да, вам нужно обработать событие MouseDown для вашего DataGridView, а затем использовать метод HitTest, чтобы вернуть индекс строки и / или столбца для заданных координат.

Например:

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);
        }
    }
}
0 голосов
/ 13 марта 2013

Я изменяю выбор в событии CellContextMenuStripNeeded, а затем использую член SelectedRows, чтобы найти его.

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]);
    }
}

Это также дает желаемый эффект выделения строки, по которой вы щелкаете правой кнопкой мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...