如何识别右击ContextMenuStrip的dataGridView单元格
本文关键字:ContextMenuStrip dataGridView 单元格 右击 何识别 识别 | 更新日期: 2023-09-27 18:14:58
用户右键单击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;
}
}
您可以通过为DataGridView的鼠标单击添加事件处理程序来跟踪最后单击的单元格。
类似:
DataGridViewCell clickedCell;
private void dataGridView1_CellMouseClick_1(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
DataGridView view = (DataGridView)sender;
if (e.Button == System.Windows.Forms.MouseButtons.Right && e.RowIndex >= 0)
{
Console.WriteLine("Clicked column "
+ e.ColumnIndex + ", row "
+ e.RowIndex + " of DataGridView "
+ view.Name + " at "
+ System.Windows.Forms.Cursor.Position);
clickedCell = view.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
然后在你的contextMenuStripItem点击事件中,打开clickcell。价值:
switch (clickedCell.Value)
{
case "Copy":
break;
... // etc.
}
你可以用datagridview的HitTest来做这件事。
这是我用过的一个代码示例。
DataGridView dgv= (DataGridView)sender;
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
try
{
dgv.CurrentCell = dgv[gvw.HitTest(e.X, e.Y).ColumnIndex, dgv.HitTest(e.X, e.Y).RowIndex];
}
}
你可以使用DGV。当前单元格查找所有信息。
switch ""
{
case ""
break;
}