Событие контекстного меню не запускается на WinForms DataGridView - PullRequest
0 голосов
/ 01 мая 2020

Итак, я просмотрел множество примеров ContextMenu и других постов о назначении событий, и, насколько я могу судить, все настроено правильно. Я могу щелкнуть правой кнопкой мыши и увидеть появившееся меню, которое доказывает, что код создает контекстное меню и назначает ему событие click, но когда я щелкаю всплывающее окно, назначенное событие никогда не срабатывает. Пользователь не должен щелкать по указанному столбцу c, он может щелкнуть любую ячейку в строке или выбрать несколько строк, а затем применить изменения к данным в каждой выбранной строке. Для простоты я тестирую с фиксированным значением, но позже пользователю нужно будет указать количество дней, которое нужно добавить к датам.
Может кто-нибудь сказать мне, где я ошибся, пожалуйста?
Мой код выглядит следующим образом:

        private void ProjectDetails_MouseDown(object sender, MouseEventArgs e)
        {
            // Ignore all but right button mouse clicks
            if (e.Button != MouseButtons.Right) return;
            // ** Temporary Solution **//
            DelayDays = 5;
            // Create the context menu on the grid clicked
            AssignContextMenu(sender, e);
        }

        private void AssignContextMenu(object sender, MouseEventArgs e)
        {
            // Exit if the control is null
            if (!(sender is DataGridView dgv)) return;
            // Get the row the user clicked
            var currentRow = dgv.HitTest(e.X, e.Y).RowIndex;
            // Do nothing if header row clicked
            if (currentRow < 0) return;
            // Count the number of rows selected
            var selectedRows = dgv.SelectedCells.Cast<DataGridViewCell>().Select(c => c.RowIndex)
                .Distinct().Count();
            // Select the row if either one or none selected
            ClickedRow = (selectedRows <= 1) ? currentRow : 0;
            // Create context menu
            using (var delayMenu = new ContextMenu())
            {
                // Add the menu item
                var delayMenuItem = new MenuItem {Text = "Delay Dates"};
                // Assign the procedure to the click event
                delayMenuItem.Click += DelayGridData_RightClick;
                // Add the item to the menu
                delayMenu.MenuItems.Add(delayMenuItem);
                // Show the menu at the position the user clicked the grid
                delayMenu.Show(dgv, new Point(e.X, e.Y));
            }
        }

        private void DelayGridData_RightClick(object sender, EventArgs e)
        {           
            // Loop through the current or selected rows adding 5 days to the dates
        }

В форме есть две сетки, поэтому мне нужно применить изменение к соответствующей сетке, и хотя я знаю, что код события DelayGridData_RightClick выполняет то, для чего он предназначен , он никогда не запускается нажатием на контекстное меню «Даты задержки».
Любая помощь или руководство будут с благодарностью!
Большое спасибо
Мартин

...