Выделить выделенную ячейку в DataGridView? - PullRequest
1 голос
/ 26 августа 2011

В моем коде ниже я показываю контекстное меню, когда пользователь щелкает правой кнопкой мыши ячейку в моем DataGridView.Мне также хотелось бы, чтобы ячейка, по которой пользователь щелкнул правой кнопкой мыши, изменила цвет фона, чтобы он мог видеть ячейку, которую он «выбрал правой кнопкой мыши».Есть ли способ добавить что-то в мой код ниже, чтобы это произошло?

private void dataGridView2_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            ContextMenu m = new ContextMenu();
            MenuItem mnuCopy = new MenuItem("Copy");
            mnuCopy.Click += new EventHandler(mnuCopy_Click);
            m.MenuItems.Add(mnuCopy);

            int currentMouseOverRow = dataGridView2.HitTest(e.X, e.Y).RowIndex;               

            m.Show(dataGridView2, new Point(e.X, e.Y));

        }
    }

1 Ответ

2 голосов
/ 26 августа 2011

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

Я бы изменил ваше MouseClick событие, чтобы получить DGV's CurrentCell. Получив его, установите свойство CurrentCell Style с нужным значением SelectionBackColor. Примерно так:

// ...
DataGridView.HitTestInfo hti = dataGridView2.HitTest(e.X, e.Y);
if (hti.Type == DataGridViewHitTestType.Cell) {
    dataGridView2.CurrentCell = dataGridView2.Rows[hti.RowIndex].Cells[hti.ColumnIndex];
    dataGridView2.CurrentCell.Style = new DataGridViewCellStyle { SelectionBackColor = System.Drawing.Color.Yellow};
}
//...

Вышесказанное немного напоминает «воздушный код-у» (другими словами, я не пытался объединить его с вашим кодом и запустить его), но я надеюсь, что вы поняли идею. Обратите внимание, что я проверяю тест попадания на ячейку; если вы этого не сделаете и пользователь не щелкнет ячейку, у вас могут возникнуть проблемы.

Теперь проблема в том, что этот код изменит SelectionBackColor для всех ячеек, по которым вы щелкнете правой кнопкой мыши. Это свойство легко восстановить в событии DGV CellLeave:

private void dgvBatches_CellLeave(object sender, DataGridViewCellEventArgs e) {
    dataGridView2.CurrentCell.Style = new DataGridViewCellStyle { SelectionBackColor = System.Drawing.SystemColors.Highlight };
}

Мне придется запомнить этот визуальный эффект; спасибо за вопрос.

...