WinForms DataGridView上未触发上下文菜单事件

时间:2020-05-01 08:17:04

标签: winforms events datagridview contextmenu

因此,我看了很多ContextMenu示例,以及有关分配事件的其他文章,据我所知,一切都已正确设置。我可以单击鼠标右键,然后看到菜单出现,这证明代码正在创建上下文菜单并向其分配click事件,但是当我单击弹出窗口时,从未命中分配的事件。 不需要用户单击特定列,他们可以单击行中的任何单元格或多选行,然后将更改应用于每个选定行中的数据。为简单起见,我使用固定值进行测试,但是稍后,用户将需要指定要添加到日期的天数。
谁能告诉我我哪里出问题了?
我的代码如下:

        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事件代码的作用是,但是单击上下文菜单“延迟”不会触发该事件代码。日期”。
任何帮助或指导将不胜感激!
非常感谢
马丁

0 个答案:

没有答案