C# DataGridView Щелкните правой кнопкой мыши ContextMenu Нажмите Получить значение ячейки

У меня есть DataGridView. Я создал ContextMenuStrip, когда щелкнул правой кнопкой мыши ячейку в столбце 4 моего DataGridView. Я, однако, застрял, потому что при щелчке левой кнопкой мыши по пункту меню ContextMenuStrip я хотел бы извлечь данные из ячейки, которая была нажата правой кнопкой мыши.

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

Это то, что я до сих пор:

GridView1.MouseDown += new MouseEventHandler(this.dataGridView_MouseDown);

private void dataGridView_MouseDown(object sender, MouseEventArgs e)
    {

        if (e.Button == MouseButtons.Right)
        {
            var ht = dataGridView1.HitTest(e.X, e.Y);

            //Checks for correct column index
            if (ht.ColumnIndex == 4 && ht.RowIndex != -1)
            {
                //Create the ContextStripMenu for Creating the PO Sub Form
                ContextMenuStrip Menu = new ContextMenuStrip();
                ToolStripMenuItem MenuOpenPO = new ToolStripMenuItem("Open PO");
                MenuOpenPO.MouseDown += new MouseEventHandler(MenuOpenPO_Click);
                Menu.Items.AddRange(new ToolStripItem[] { MenuOpenPO });

                //Assign created context menu strip to the DataGridView
                dataGridView1.ContextMenuStrip = Menu;
            }

            else
                dataGridView1.ContextMenuStrip = null;
        }
    }

Я думаю, что этот пост может быть то, что я ищу

Однако, если я изменю: private void dataGridView_MouseDown(object sender, MouseEventArgs e)в

private void dataGridView_MouseDown(object sender, DataGridViewCellMouseEventArgs e)

Я не уверен, как изменить GridView1.MouseDown += new MouseEventHandler(this.dataGridView_MouseDown); Поэтому я не получаю сообщение об ошибке. Или есть лучший способ сделать это?

Окончательное решение с помощью Gjeltema

dataGridView1.CellMouseDown += this.dataGridView1_CellMouseDown;

    private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        //Checks for correct column index
        if (e.Button == MouseButtons.Right && e.ColumnIndex == 4 && e.RowIndex != -1)
        {
            //Create the ContextStripMenu for Creating the PO Sub Form
            ContextMenuStrip Menu = new ContextMenuStrip();
            ToolStripMenuItem MenuOpenPO = new ToolStripMenuItem("Open PO");
            MenuOpenPO.MouseDown += new MouseEventHandler(MenuOpenPO_Click);
            Menu.Items.AddRange(new ToolStripItem[] { MenuOpenPO });

            //Assign created context menu strip to the DataGridView
            dataGridView1.ContextMenuStrip = Menu;
            CellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
        }

        else
            dataGridView1.ContextMenuStrip = null;
    }

1 ответ

Решение

Если вы собираетесь с решением этого поста, то обратите внимание, что он подписывается на CellMouseDown событие, а не MouseDown событие. Это имеет другую подпись.

Кроме того, что касается.Net 2.0, вам не нужен весь синтаксис переноса делегатов, вы можете просто += функция, которая соответствует подписи делегата события, например так:

// Your updated MouseDown handler function with DataGridViewCellMouseEventArgs
GridView1.CellMouseDown += this.dataGridView_MouseDown;

Тогда у вас не будет сообщения об ошибке, и вы сможете делать то, что видите в посте.

Другие вопросы по тегам