Элемент ContextMenuStrip, созданный в DataGridViewCellMouseEventHandler, содержит данные из предыдущего нажатия.

Пытаюсь решить это и немного застрял.

в Form1.Designer.cs добавляю событие:

this.dataGridView1.CellMouseUp += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.DataGridView1_CellMouseUp);

Затем я использую следующее в Form1.cs:

    private void DataGridView1_CellMouseUp(Object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            ContextMenuStrip cm = new ContextMenuStrip();
            cm.Items.Add("Data:" + e.RowIndex + e.ColumnIndex);
            ContextMenuStrip = cm;
        }
    }

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

2 ответа

Попробуйте принудительно отобразить полосу меню:

if (e.Button == MouseButtons.Right) {
  ContextMenuStrip cm = new ContextMenuStrip();
  cm.Items.Add("Data:" + e.RowIndex + e.ColumnIndex);
  cm.Show(MousePosition);
}

На самом деле это работает сейчас со следующим кодом (спасибо за предложения):

    if (e.Button == MouseButtons.Right)
    {
        ContextMenuStrip cm = new ContextMenuStrip();
        cm.Items.Add("Data:" + e.RowIndex + e.ColumnIndex);
        cm.Show(MousePosition);
    }
Другие вопросы по тегам