Столбец DataGridViewColumn с ContextMenuStrip — Как я могу * всегда * получать связанную ячейку / строку?

#winforms #datagridview #contextmenu

#winforms #datagridview #contextmenu

Вопрос:

У меня есть DataGridViewColumn с ContextMenuStrip, назначенным в конструкторе. В обработчике события щелчка элемента строки меню мне нужно получить индекс строки строки, содержащей ячейку, которая вызвала контекстное меню. DataGridView.CurrentCell.RowIndex работает нормально, если ячейка была выбрана щелчком левой кнопки мыши перед отображением контекстного меню. Однако, при щелчке правой кнопкой мыши на ячейке, не выделив ее предварительно, RowIndex всегда равно 0. Я пытался найти родительский элемент строки контекстного меню и перейти по цепочке к ячейке / столбцу, но ContextMenuStrip.Parent всегда имеет значение null. Есть ли способ, которым я могу сделать это, не используя местоположение меню? Если мне нужно использовать location, есть ли надежный способ сделать это?

Ответ №1:

Щелчок правой кнопкой мыши — не единственный способ вызвать контекстное меню. Shift F10 или клавиша контекстного меню также вызовут ее. Вызов контекстного меню с клавиатуры не дает координаты X, Y, поэтому единственный способ узнать, каким должен быть контекст меню, — это понятие «текущий выбранный элемент».

Что я делаю, это переопределяю событие MouseDown и, если нажата правая кнопка, выделяю ячейку под мышкой.

Комментарии:

1. Ооооо, хорошая идея! Я собираюсь попробовать это и дам вам знать.

2. В итоге мне пришлось установить свойство DataGridView CurrentCell щелчком правой мыши, в отличие от выбора ячейки. Но нажатие мыши и настройка этого работают отлично. Спасибо!