用户右键单击 DGV 中的单元格,然后在 ContextMenuStrip 中进行选择。根据他们的 CMS 选择,我想做一些事情(复制、隐藏、过滤)。我的问题是识别右键单击的单元格。
我试图用以下方法处理这种情况,但无法引用 [ColumnIndex]。
private void cmsDataGridView_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Text)
{
case "Copy":
break;
case "Filter On":
break;
case "Hide Column":
DataGridViewBand band = dataGridView1.Columns[e.ColumnIndex];
band.Visible = false;
break;
}
}
我应该用两种不同的方法来做这件事吗?一个处理鼠标单击(然后我可以在其中捕获 DGV 列索引),然后从那里,我调用 CMS 项目单击事件?
谢谢你的帮助,布赖恩。
适合我的代码。哦,我确实必须从设计器中 dataGridView 的 ContextMenuStrip 属性中删除 cmsDataGridView 方法。将其留在那里会引起问题。
// Identify the cell clicked for cmsDataGridView
DataGridViewCell clickedCell;
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
{
dataGridView1.ClearSelection();
clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
clickedCell.Selected = true;
cmsDataGridView.Show(dataGridView1, e.Location);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
private void cmsDataGridView_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Text)
{
case "Copy":
break;
case "Filter On":
break;
case "Hide Column":
DataGridViewBand band = dataGridView1.Columns[clickedCell.ColumnIndex];
band.Visible = false;
break;
}
}