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